2011-10-21 2 views
1

나는 class A 유형의 벡터를 가지고 있습니다. 클래스 A에는 명시 적으로 정의 된 복사 생성자가 있지만 복사 연산자가 비공개로 정의되지 않았습니다 (사용되지는 않습니다). 다음과 같이 벡터에 새 요소를 삽입하면vector.insert (...)가 생성자 또는 할당 연산자를 호출합니까?

A walker;      //This calls the default constructor. 
std::vector<A> vec; 
std::vector<A>::iterator it = vec.begin(); 
vec.insert(it, walker);  //Shouldn't this call the copy constructor? 

복사 연산자가 비공개라는 오류가 발생합니다. 하지만 vector가 복사 생성자를 사용해서는 안되는가?

+0

중 하나를 구현하는 경우 ** ** 어쨌든 ** .... –

답변

4

vector 실제로 삽입 된 요소에 대한 복사 생성자를 사용하고 있습니다. 그러나 vector에는 할당 연산자가 내부적으로 필요하지만 vector 유형을 할당 할 수있는 필수 항목 내에 있습니다. C++ 11은 이제 move-assignment 만 요구합니다.

+0

을 구현해야합니다. 그것은 _either_ move _or_ 'classic'과제를 요구합니다. – sehe

+0

@sehe 잠깐, 그래서 C++ 11은 하나가 제공되는지 아니면 다른 것이 제공되는지를 결정하는 데 필요한 내성을 제공합니까? 경건하지 않은 SFINAE 해커인가 아니면 깨끗한 해결책이 있습니까? –

+0

@Karl Knechtel : 인트로 스펙 션이 필요하지 않습니다. 함수 오버로딩이 필요합니다. 즉, C++ 11은 SFINAE를 제공하여 C++ 03이하는 것보다 훨씬 많은 내용을 포함 할 수 있어야합니다. –

관련 문제