본문 바로가기
Development/C++

복사생성자와 복사 대입 연산자

by KingCat 2013. 12. 11.

복사생성자 : 객체 정의시 특정 객체를 매개변수로 사용할 때 호출되는 생성자

 

예) Widget(const Widget& rhs);


- 자기자신의 인스턴스에 대해 대입될 경우 호출된다.

- 함수의 인자로 들어갈때 복사되는 과정에서 호출된다.

- 함수의 리턴값으로 사용되면서 복사되는 과정에서 호출된다.

 

- 디폴트 복사 생성자가 생성되나 단순히 값에 의한 복사를 함으로 (얕은 복사) 위험한 요소가 있다.

 

- 하여 동적 할당된 메모리를 복사해야 할 경우 사용자 정의 복사 생성자를 정의하여 깊은 복사를 구현해주어야한다.



복사 대입 연산자 : 같은 타입의 다른 객체에 어떤 객체의 값을 복사하는 용도로 쓰이는 함수


예) Widget& operator=(const Widget& rhs);


어떤 객체가 새로이 정의될 때는 생성자(복사생성자)가 불린다. 이미 정의가 된 것에는 이후에 대입 연산(복사 대입 연산자)이 될 수 밖에 없다.


Widget w3 = w2; 같은 경우 정의하는 부분이므로 대입 연산자가 아닌 복사 생성자가 호출된다.


함수 호출시 Call-By-Value 같은 경우 매개변수에 값이 복사되어 넘어가는데, 이 때 복사생성자가 호출되면서 매개변수가 사용된다.


(일반적으로 좋지 않다. 값에 의한 전달 (Call-By-Value) 보다는 상수 객체에 대한 참조 (Call-By-Refrence)가 좋다고 한다.