728x90
728x90
복사생성자 호출 시점을 아는 것은 중요하며, 총 3가지가 있습니다.

1. 기존에 생성된 객체를 이용해서 새로운 객체를 초기화 (복사 등)

2. Call by value 방식의 함수 호출 과정에서 객체를 인자로 전달할 때

3. 객체를 반환할 때 참조형으로 반환하지 않는 경우. (임시객체 생성)

 

* 임시객체  : 힙 이외의 공간에 생성되는 것

A함수에 int형 a인자가 들어오고 a를 return 한다고 할 때
A함수에서만 통용되고 없어지는 임시객체를 생성

 

 

복사생성자 호출 시점들의 공통점

객체를 새로 생성하는 동시에 동일한 자료형의 객체로 초기화해야 합니다.
-> 메모리공간이 할당되면서 동시에 초기화!

 

* 복사생성자 정의 생략 시 자동으로 디폴트복사생성자가 삽입됩니다. 매개변수로 전달되는 객체의 멤버변수를 선언되는 객체의 멤버변수로 자동으로 복사하나 문제점이 있습니다. (얕은복사, 메모리릭)

* 객체의 깊은복사 시 객체를 인자로 받는 참조형 매개변수를 가진 생성자를 추가 (디폴트 복사생성자를 오버로딩)
- 생성자의 내부에서는 멤버 대 멤버 복사를 진행하는 코드를 넣어줍니다. (초기화)

* 복사생성자와 전달인자가 하나인 생성자의 묵시적 변환이 싫으면 생성자 앞에 explicit를 추가

* 복사생성자의 매개변수는 반드시 참조형. 아니면 호출의 무한루프 발생(컴파일에러)

* 복사생성자의 매개변수는 보통 const 선언

 

 

 

728x90
728x90
블로그 이미지

coding-restaurant

코딩 맛집에 방문해주셔서 감사합니다.

,

v