3. 복사생성자를 통한 깊은 복사.
by Qerogram1. Default Copy Creator로는 메모리주소가 중복되는 얕은복사가 잦게 일어난다.
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 27 28 29 30 31 | #include <iostream> using namespace std; class Dog { private : int Dognum; public : ~Dog() { cout << "소멸자 호출" << endl; } Dog() { cout << "생성자 호출" << endl; } Dog(int num) : Dognum(num) { cout << "생성자 호출" << endl; } int getNum() const { return Dognum; } void setNum(int num) { Dognum = num; } }; int main(int argc, char* argv[]) { Dog d(10); Dog d2(d); printf("d = %p\n", d); printf("d2 = %p\n", d2); cout << d.getNum() << endl; cout << d2.getNum() << endl; return 0; } | cs |
* 결과
실제로도, 생성자를 1회, 소멸자를 2회 호출하는 모습을 확인가능하다.
생성자 호출
d = 0x7ffd801adc20
d2 = 0x7ffd801adc10
10
10
소멸자 호출
소멸자 호출
* 결과
2. 복사생성자를 Overloading해주면 깊은 복사가 가능하다.
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 27 28 29 30 31 32 | #include <iostream> using namespace std; class Dog { private : int Dognum; public : ~Dog() { cout << "소멸자 호출" << endl; } Dog(int num) : Dognum(num) { cout << "생성자 호출" << endl; } Dog(Dog& Dog2) { setNum(Dog2.getNum()); cout << "복사 생성자 호출" << endl; } int getNum() const { return Dognum; } void setNum(int num) { Dognum = num; } }; int main(int argc, char* argv[]) { Dog d(10); Dog d2(d); printf("d = %p\n", d); printf("d2 = %p\n", d2); cout << d.getNum() << endl; cout << d2.getNum() << endl; return 0; } | cs |
*결과
생성자 호출
복사 생성자 호출
d = 0x7fff3eecfbb0
d2 = 0x7fff3eecfba0
10
10
소멸자 호출
소멸자 호출
'코딩 > C&C++' 카테고리의 다른 글
6. Quick Sort (0) | 2017.04.10 |
---|---|
5. void PTR (0) | 2017.04.09 |
4. 다형성 (0) | 2017.04.09 |
2. 연산자 오버로딩(Overloading) (0) | 2017.04.08 |
1. Template (0) | 2017.04.07 |
블로그의 정보
Data+
Qerogram