개발 언어/cpp
cpp 복사생성자 (copy constructor)
eeeun:)
2021. 12. 21. 15:42
반응형
복사 생성자(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