좋아, "효과적인 C++"을 읽고 항목 12는 복사 생성자에서 복사 할당을 호출하지 말라고 말합니다.하지만 이렇게하려고하면 작동하지 않습니다. 그래서 왜 복사 생성자에서 복사 할당 코드를 재사용 할 수 없는지 묻고 싶습니다.C++ : 복사 생성자의 호출 복사 할당
-1
A
답변
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
생성자가 새 개체를 만듭니다. 대입 연산자는 기존 객체를 수정합니다. 할당 연산자를 사용하여 새 객체를 만들 수는 없습니다. 단순한 경우에도 작동하는 것처럼 보이지만이를 수행하는 방법을 알지 못합니다.
관련 문제
- 1. 복사 생성자의 벡터 벡터 복사
- 2. Java와 C++ 복사 생성자의 차이점
- 3. 생성자의 문자열 복사
- 4. 개인 복사 생성자/복사 할당 C++
- 5. 복사 생성자의 포인터 인수
- 6. constexpr 생성자의 배열 복사
- 7. 생성자의 연결 호출에서 elision 복사
- 8. 정의 된 복사 생성자의 기본 동작 C++
- 9. C++ 복사 생성자의 Const 정확성이 무시됩니까?
- 10. enum을 사용하여 struct를위한 C++ 복사 생성자의 서명
- 11. C++ 복사 생성자, 할당 'operator ='
- 12. 복사/이동 할당 혼동
- 13. 복사 및 할당
- 14. C++ 복사 생성자/할당 연산자 오류
- 15. 할당 연산자 함수에서 호출 복사 생성자
- 16. 복사 할당 연산자 오버로드
- 17. 부실 복사 생성자와 이상한 오류를주고 할당 할당 연산자를 복사
- 18. 초기화, 복사 생성자와 할당
- 19. 할당 또는 복사 하시겠습니까?
- 20. 동일한 포인터 가변 메모리 누수에 대한 복사 생성자의 반복 호출?
- 21. 왜 안 함 CObject의 복사 생성자와 할당
- 22. Python : shallow 및 deep 복사 생성자의 구현
- 23. C++ 암시 적 복사 생성자와 할당 연산자
- 24. SystemVerilog vs C++ 할당 : 참조 또는 복사?
- 25. objective-c 보유, 할당 및 복사 하시겠습니까?
- 26. C 번호, 클래스 [] 연산자와 할당/복사
- 27. memcpy() 대신 할당 된 C 구조체 복사
- 28. C++ 사용자 정의 클래스 복사 할당 누락?
- 29. 복사 할당 연산자 (C++)의 예외 처리
- 30. 복사 방법 호출
아마도 이니셜 라이저 목록에서 직접 복사본을 가져 와서보다 효과적인 회원 초기화가 될 것으로 생각합니다. –
"Effective C++"12 번 항목에서 잘 설명되어있는 느낌이 들었습니다. – juanchopanza
다행스럽게도 모든 대답이 스콧이 거기에서 설명했던 것과 똑같은 것을 설명 할 수 있기를 바랍니다. 12_ – P0W