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

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

1답변

  • 좋아요

    2

    싫어요
    채택취소하기

    만약 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;에 대한 복사 생성자바로 수행이 가능할 것입니다.

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

작성한 답변에 다른 개발자들이 댓글을 작성하거나 댓글에 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.