C++ 복사생성자 매개변수

조회수 909회

굳이 참조자로 받는 이유가 있나요 ? 그게 강제로 약속이 되어있는 것 같아서요.

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • 만약 A란 클래스가 있다면 A(const A& obj)가 복사 생성자라고 표준에서 정의하였습니다.

    https://en.cppreference.com/w/cpp/language/copy_constructor

    논리적으로 따져 보기 위해서 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;에 대한 복사 생성자바로 수행이 가능할 것입니다.

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)