2013-10-27 2 views
-1

좋아, "효과적인 C++"을 읽고 항목 12는 복사 생성자에서 복사 할당을 호출하지 말라고 말합니다.하지만 이렇게하려고하면 작동하지 않습니다. 그래서 왜 복사 생성자에서 복사 할당 코드를 재사용 할 수 없는지 묻고 싶습니다.C++ : 복사 생성자의 호출 복사 할당

+1

아마도 이니셜 라이저 목록에서 직접 복사본을 가져 와서보다 효과적인 회원 초기화가 될 것으로 생각합니다. –

+6

"Effective C++"12 번 항목에서 잘 설명되어있는 느낌이 들었습니다. – juanchopanza

+1

다행스럽게도 모든 대답이 스콧이 거기에서 설명했던 것과 똑같은 것을 설명 할 수 있기를 바랍니다. 12_ – P0W

답변

0

복사 생성자에서 복사 할당 연산자를 사용한다고 가정합니다.

struct A 
{ 
    A (const A &a) 
    { 
    *this = a; // Assignment to a not yet constructed object is not well 
    } 

    A &operator=(A a) // Pass by value 
    { 
     // ... 
    } 
}; 

A a1, a2; 
a1 = a2; // Infinite recursion! 

그것은 불가능하고 무한 재귀가 발생합니다 : 그럼 당신은 할당 연산자에 대한 copy-and-swap 관용구를 구현 할 수있는 능력을 잃게됩니다.

+1

감사합니다. 유용하다고 생각합니다. 인수가 값으로 전달되고 생성 된 객체가 아닌 객체에 할당하는 것이 좋지 않으면 무한 재귀가 발생합니다. 죄송 합니다만 투표 할만한 평판이 충분하지 않습니다. – lingjieyu

0

생성자가 새 개체를 만듭니다. 대입 연산자는 기존 객체를 수정합니다. 할당 연산자를 사용하여 새 객체를 만들 수는 없습니다. 단순한 경우에도 작동하는 것처럼 보이지만이를 수행하는 방법을 알지 못합니다.

관련 문제