728x90
728x90
복사생성자 호출 시점을 아는 것은 중요하며, 총 3가지가 있습니다.
1. 기존에 생성된 객체를 이용해서 새로운 객체를 초기화 (복사 등)
2. Call by value 방식의 함수 호출 과정에서 객체를 인자로 전달할 때
3. 객체를 반환할 때 참조형으로 반환하지 않는 경우. (임시객체 생성)
* 임시객체 : 힙 이외의 공간에 생성되는 것
A함수에 int형 a인자가 들어오고 a를 return 한다고 할 때
A함수에서만 통용되고 없어지는 임시객체를 생성
복사생성자 호출 시점들의 공통점
객체를 새로 생성하는 동시에 동일한 자료형의 객체로 초기화해야 합니다.
-> 메모리공간이 할당되면서 동시에 초기화!
* 복사생성자 정의 생략 시 자동으로 디폴트복사생성자가 삽입됩니다. 매개변수로 전달되는 객체의 멤버변수를 선언되는 객체의 멤버변수로 자동으로 복사하나 문제점이 있습니다. (얕은복사, 메모리릭)
* 객체의 깊은복사 시 객체를 인자로 받는 참조형 매개변수를 가진 생성자를 추가 (디폴트 복사생성자를 오버로딩)
- 생성자의 내부에서는 멤버 대 멤버 복사를 진행하는 코드를 넣어줍니다. (초기화)
* 복사생성자와 전달인자가 하나인 생성자의 묵시적 변환이 싫으면 생성자 앞에 explicit를 추가
* 복사생성자의 매개변수는 반드시 참조형. 아니면 호출의 무한루프 발생(컴파일에러)
* 복사생성자의 매개변수는 보통 const 선언
728x90
728x90
'C, C++ > 열혈 C++ 프로그래밍' 카테고리의 다른 글
[윤성우 열혈 c++] OOP 단계별 프로젝트 07단계 (0) | 2021.11.22 |
---|---|
[윤성우 열혈 c++] OOP 단계별 프로젝트 06단계 (0) | 2021.11.22 |
[윤성우 열혈 C++ 프로그래밍] 10. 연산자 오버로딩 1 (책) (0) | 2021.11.05 |
[윤성우 열혈 c++] OOP 단계별 프로젝트 05단계 (0) | 2021.11.04 |
[윤성우 열혈 c++] OOP 단계별 프로젝트 04단계 (0) | 2021.11.04 |