복사생성자

Programming/C++ 2015. 5. 13. 15:05

기본 복사 생성자

 

- 기본적으로 제공되는 생성자 중 하나이다.

- 객체간의 변수의 값을 복사해준다

- 호출시키는 객체의 선언과 동시에 초기화할 때 발생함

 

복사 생성자의 호출 시점

 

- 기존에 생성된 객체를 이용해서 새로운 객체를 초기화 하는 경우

- Call-By-Value 방식의 함수호출 과정에서 객체를 인자로 전달하는 경우

- 객체를 반환하는데, 참조형으로 반환하지 않는 경우

 

** 멤버 대 멤버의 복사에 사용되는 원본을 변경시키는 것은 복사의 개념을 무너트리는

    행위가 되므로 const 를 사용해서 예방하는게 좋을듯..

 

 

자동으로 삽입되는 디폴트 복사생성자

 

- 복사 생성자를 정의하지 않으면 디폴트 복사 생성자가 자동으로 삽입된다.

 

** 변환에 의한 초기화는 explicit로 막을 수 있다.

 

explicit 키워드를 쓰게되면 복사 생성자가 묵시적으로 호출될 때 묵시적 형변환을 막아준다.

explicit 키워드를 쓰게되면 코드가 더욱 명확함을 더해줄것이다.

 

 

메모리 공간의 할당과 초기화가 동시에 일어나지 않는 상황

 

Ex 1 )

int SimpleFunc(int n)

{

...................

}

 

int main(void)

{

int num = 10;

 

// 호출되는 순간 매개변수가 할당과 동시에 초기화가 된다.

SimpleFunc(num);

}

 

Ex 2)

int SimpleFunc(int n)

{

..............

return n;                // 반환하는 순간 메모리 공간 할당되면서 동시에 초기화한다.

}

 

int main(void)

{

int num = 0;

cout << SimpleFunc(num) << endl;

}

 

Ex2 의 경우에 정수를 반환하는 과정에서 메모리 공간이 할당된다고 한다.

*** 함수가 값을 반환하면, 별도의 메모리공간이 할당되는데, 이 공간에 반환 값이 저장된다.

(반환 값으로 초기화가 된다.)

 

 

 

할당 이후에 복사생성자를 통한 초기화

 

 

 

 

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

동적 메모리 해제 매크로  (0) 2015.05.15
깊은 복사와 얕은 복사  (0) 2015.05.13
클래스와 배열  (0) 2015.05.13
캡슐화(Encapsulation)  (0) 2015.05.12
const 함수  (0) 2015.05.12
admin