1. 깊은 복사 (Deep Copy)
깊은 복사는 객체의 모든 멤버 데이터를 새로 복사하여 두 객체가 서로 독립적인 상태를 유지하도록 한다.
- 주요 특징:
- 새로운 메모리 공간을 할당하여 복사.
- 원본 객체와 복사된 객체의 수명이 독립적.
- 동적 메모리를 사용하는 경우 유용.
// 복사 생성자 예제
MyClass(const MyClass& other) {
data = new int(*(other.data)); // 새로운 메모리 할당 후 복사
}
2. 얕은 복사 (Shallow Copy)
얕은 복사는 객체의 멤버 데이터를 그대로 복사하되, 포인터가 같은 메모리를 참조하도록 한다.
- 주요 특징:
- 메모리 공간을 새로 할당하지 않음.
- 복사된 객체와 원본 객체가 같은 메모리를 참조 (수명 공유).
- 하나의 객체가 메모리를 해제하면 다른 객체가 이를 참조하려다 문제가 발생할 수 있음.
// 얕은 복사 예제
MyClass(const MyClass& other) {
data = other.data; // 포인터 주소만 복사
}
3. 깊은 복사와 얕은 복사의 차이점
구분 | 깊은 복사 | 얕은 복사 |
메모리 사용 | 별도의 메모리 할당 | 메모리 공유 |
객체 간 독립성 | 복사된 객체와 원본 객체가 독립적 | 복사된 객체와 원본 객체가 종속적 |
위험성 | 안전 | 메모리 이중 해제 등의 위험성 존재 |