▶ C++에서 얕은 복사와 깊은 복사
▷ 얕은 복사 (shallow copy)
- 객체 복사 시, 객체의 멤버를 1:1로 복사
● 객체의 멤버 변수에 동적 메모리가 할당된 경우
- 사본은 원본 객체가 할당 받는 메모리를 공유하는 문제 발생
▷ 깊은 복사(deep copy)
- 객체 복사 시, 객체의 멤버를 1:1로 복사
● 객체의 멤버 변수에 동적 메모리가 할당된 경우
- 사본은 원본이 가진 메모리 크기 만큼 별도로 동적 할당
- 원본의 동적 메모리에 있는 내용을 사본에 복사
● 완전한 형태의 복사
- 사본과 원본은 메모리를 공유하는 문제 없음
▷ 객체 복사
▶ 복사 생성자
- 객체의 복사 생성시 호출되는 특별한 생성자
▷ 특징
- 한 클래스에 오직 한 개만 선언 가능
- 복사 생성자는 보통 생성자와 클래스 내에 중복 선언 가능
▷ 모양
- 클래스에 대한 참조 매개 변수를 가지는 독특한 생성자
▷ 복사 생성 과정
▷ Circle의 복사 생성자와 객체 복사
▶ 디폴트 복사 생성자
- 복사 생성자가 선언되어 있지 않는 클래스
- 컴파일러는 자동으로 디폴트 복사 생성자 삽입
▷ 디폴트 복사 생성자 사례
예제 1) 얕은 복사 생성자를 사용하여 프로구램이 비정상 종료되는 경우
예제1 실행과정)
예제 2) 깊은 복사 생성자를 가진 정상적인 Person 클래스
예제 2) 실행과정
예제 3) 묵시적 복사 생성에 의해 복사 생정자가 자동 호출되는 경우
'[C++]' 카테고리의 다른 글
[C++] static (0) | 2022.10.26 |
---|---|
[C++] 함수 중복(다형성) (0) | 2022.10.26 |
[C++] 참조 (0) | 2022.10.23 |
[C++] 인자 전달 방식 (0) | 2022.10.15 |
[C++] 문자열 (1) | 2022.10.15 |
댓글