Post

Chapter 6. 복사 생성자

Chapter 6. 복사 생성자

‘명품 C++Programming - 황기태’ 5장 학습 내용

소스코드

1절. 복사

얕은 복사와 깊은 복사

copy

C++에서 얕은 복사와 깊은 복사

  • 얕은 복사(shallow copy)
    • 객체 복사 시, 객체의 멤버를 1대 1로 복사
    • 객체의 멤버 변수에 동적 메모리가 할당된 경우
      • 사본은 원본 객체가 할당받은 메모리를 공유하는 문제 발생
  • 깊은 복사(deep copy)
    • 객체 복사 시, 객체의 멤버를 1대 1로 복사
    • 객체의 멤버 변수에 동적 메모리가 할당된 경우
      • 사본은 원본이 가진 메모리 크기 만큼 별도로 동적 할당
      • 원본의 동적 메모리에 있는 내용을 사본에 복사
    • 완전한 형태의 복사
      • 사본과 원본은 메모리를 공유하는 문제 없음

C++에서 객체의 복사

// 예제로 사용한 클래스
class Person{
 int id;
 char *name;
................
};

person

2절. 복사 생성자

복사 생성자

  • 복사 생성자(copy constructor)란?
    • 객체의 복사 생성 시 호출되는 특별한 생성자
  • 특징
    • 한 클래스에 오직 한 개만 선언 가능
    • 복사 생성자는 보통 생성자와 클래스 내에 중복 선언 가
    • 모양
      • 클래스에 대한 참조 매개 변수를 가지는 독특한 생성자
  • 복사 생성자 선언
class Circle{
.....................
 Circle(Circle& c);
 // 복사 생성자 선언
.....................
};

Circle::Circle(Circle& c){
// 복사 생성자 구현
}

복사 생성 과정

copycon

3절. 디폴트 복사 생성자

디폴트 복사 생성자

  • 복사 생성자가 선언되어 있지 않는 클래스
    • 컴파일러는 자동으로 디폴트 복사 생성자 삽입

circle2

디폴트 복사 생성자 사례

exdefault

  • 예제 2. 얕은 복사 생성자의 프로그램의 오류를 가진 Person Class 예제
    SourceCodeChecking

예제 2의 실행과정

howex2

howex3

예제 3의 실행과정

howex2

howex3

This post is licensed under CC BY 4.0 by the author.