C++/C++ 기본

묵시적 복사 생성

검정비니 2018. 7. 28. 17:08
728x90
반응형

묵시적 복사 생성



C++의 복사 생성자가 묵시적으로 호출되며 객체가 복사되는 경우를 묵시적 복사 생성이라고 한다. 묵시적인 복사 생성의 경우는 다음 3가지로서, 컴파일러가 복사 생성자를 자동으로 호출하는 경우이다.




1. 객체로 초기화하여 객체가 생성될 때



다음은 son 객체를 생성할 때 father 객체로 초기화하도록 하는 선언문이다.  ==>  Person son = father; //복사 생성자 자동 호출


컴파일러는 위의 문장을 다음과 같이 변환하여 복사 생성자를 호출한다.        ==>  Person son(father);


위의 과정을 다음의 치환문과 혼돈하지 마라.


i.e.

Person son;

son = father; //복사 생성자 호출되지 않음


위의 경우는 복사 생성자가 아니라 대입 연산자(혹은 대입 함수)가 호출되면서 대입 연산을 진행한다. 대입 함수 역시 복사 생성자처럼 정의를 할 수 있지만, 미리 구현해 놓지 않으면 컴파일러가 자동으로 기본 대입 함수를 삽입한다. 이때, 이 기본 대입 함수는 얕은 복사를 하기 때문에 되도록이면 깊은 복사를 하는 대입 연산자를 직접 구현하는 것이 좋다. 대입 연산자에 대해서는 후에 더 자세히 설명하도록 하겠다.




2. 값에 의한 호출로 객체가 전달될 때



값에 의한 호출로 객체가 전달되면, 함수의 매개 변수 객체가 생성될 때 복사 생성자가 자동으로 호출된다.


다음 예제를 통해서 자세히 알아보도록 하자.


i.e.

void f(Person person) { //매개 변수 person이 생성될 때 복사 생성자 호출

...

}

Person p;

f(p); //값에 의한 호출로 p 객체 전달 -> 복사 생성자가 호출됨


위에서 볼 수 있듯이, 값에 의한 호출로 매개 변수 객체가 생성될 때, 생성자 대신 복사 생성자가 실행된다.




3. 함수가 객체를 리턴할 때



함수가 객체를 리턴할 때, return 문은 리턴 객체의 복사본을 생성하여 호출한 곳으로 전달한다. 복사본이 생성될 때에 복사 생성자가 실행된다.

반응형

'C++ > C++ 기본' 카테고리의 다른 글

함수 중복  (0) 2018.07.28
대입 연산자  (0) 2018.07.28
복사 생성자  (0) 2018.07.27
참조와 함수  (0) 2018.07.27
객체 치환 및 객체 리턴  (0) 2018.07.26