반응형
복사 생성자(copy constructor)
자신과 같은 클래스 타입의 다른 객체에 대한 참조(reference)를 인수로 전달받아
그 참조를 가지고 자신을 초기화하는 방법
// 복사생성자선언
Robot::Robot(const Robot& r)
복사 생성자는 새롭게 생성되는 객체가 원본 객체와 같으면서도, 완전한 독립성 가짐
-> 복사 생성자의 대입은 깊은 복사(deep copy)를 통한 값의 복사이기 때문
깊은 복사가 뭔지 모른다면 아래 링크를 클릭!
상수로 선언된 참조자이며, type은 클래스(자기 자신)
복사 생성자는 기존 값을 복사해 전달하기에 값이 바뀌면 안돼서 const로 선언.
- 정의하지 않으면 디폴트 복사 생성자가 생김(얕은 복사)
- 복사 생성자를 새로 정의했다고 다 깊은 복사인 것은 아님.
- 깊은 복사는 복사 생성자 내에 동적 할당된 새 객체 필요
class Robot {
public:
char *name;
// 생성자
Robot(char* _name) {
//공간을 새로 할당해서 데이터를 입력
name = new char[strlen(_name) + 1];
strcpy(name, _name);
}
// 복사 생성자 - 깊은 복사
Robot(const Robot& r) {
//공간을 새로 할당해서 데이터를 입력
name = new char[strlen(r.name) + 1];
strcpy(name, r.name);
}
// 복사 생성자 - 얕은 복사
Robot(const Robot& r) {
// 주소값을 넣어줌
name = r.name;
}
}
728x90
'개발 언어 > cpp' 카테고리의 다른 글
cpp 증감 연산자 오버로딩 (전위 연산자, 후위 연산자) (0) | 2021.12.30 |
---|---|
CPP 클래스 상속(Inheritance) (0) | 2021.12.22 |
cpp 연산자 오버로딩(Operator Overloading) (0) | 2021.12.21 |
cpp 오버로딩(Overloading) (0) | 2021.12.21 |
cpp 얕은 복사와 깊은 복사 (0) | 2021.12.21 |
댓글