1 답변
-
만약 A란 클래스가 있다면
A(const A& obj)
가 복사 생성자라고 표준에서 정의하였습니다.논리적으로 따져 보기 위해서
A(A obj)
를 복사 생성자라 칭해 보겠습니다.A a; A b = a;
다음과 같이
b
를 복사 생성자로 만들게 될 때A(A obj)
는obj
는 참조자가 아니기 때문에a
에서obj
로 복사가 필요하게 됩니다. 그러면 이때 또다시 복사가 이루어져야 하며 이를 위해서 복사 생성자가 호출 될 것입니다. 그럼 그 복사 생성자를 위해 또다시 복사 생성자가 호출되는 재귀적 상황에 빠지게 됩니다. 이 재귀는 영원히 빠져나올 수 없는에 복사 생성자로 입력된 객체는 파라미터로 복사가 이루어져서는 안됩니다.A(const A& obj)
와 같은 경우a
에서obj
로 전달될 때 객체의 복사가 아닌 주소가 이동하는 것이기 때문에A
에 대한 복사가 필요 없고 복사 생성자 또한 호출될 필요가 없습니다. 따라서A b = a;
에 대한 복사 생성자바로 수행이 가능할 것입니다.
댓글 입력