fullstack

[C++] 복사 생성자

Language/C++

- 복사 생성자란


복사 생성자란 자기 자신과 같은 형태의 객체를 인자로 받을 수 있는 생성자를 말한다.


다음은 복사 생성자의 예이다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
using namespace std;
 
class AAA
{
    int val;
public:
    AAA(int _val) {
        val = _val;
    }
    AAA(const AAA& a) {
        val = a.val;
    }
    void showValue() { cout << "value: " << val << endl; }
};
 
int main()
{
    AAA a1(10);
    AAA a2(a1);
 
    a1.showValue();
    a2.showValue();
 
    return 0;
}




복사생성자는 인자로 전달된 객체를 레퍼런스로 받아야 하며 내용 변경을 불가능 하게 하기 위해 const 선언을 한다.




- 다폴트 복사 생성자


일반 생성자와 소멸자처럼 복사 생성자도 디폴트 복사 생성자를 제공한다.

위 예제에서 11~13 라인을 지워도 자동으로 디폴트 복사 생성자를 삽입하기 때문에 똑같이 동작한다.


하지만 생성자내에서 동적할당을 하는경우 디폴트 복사 생성자에서는 얕은 복사(Shallow Copy)를 하게 되는데 이경우 문제가 발생한다.

따라서 깊은 복사(Deep Copy) 로 직접 복사 생성자를 구현해 주어야 한다.


'Language > C++' 카테고리의 다른 글

[C++] static 키워드  (0) 2015.12.02
[C++] const 키워드  (0) 2015.12.02
[C++] friend 선언  (0) 2015.12.02
[C++] this 포인터  (0) 2015.12.02
[C++] 생성자(Constructor)와 소멸자(Destructor)  (0) 2015.11.30