반응형
class를 설계할 때 객체의 복사를 허용한다면, C++ 에서 객체를 복사하는 방법은 두가지가 있다.
1. 객체 생성시 복사 생성자를 이용하는 복사
2. 복사 대입연산자를 이용하는 복사
두가지 방법의 미묘한 차이점이 존재하는데.
코드를 통해 결론부터 말하면
다음의 예는 복사 생성자
Person p1(10, "ted");
Person p2(p1);
또는
Person p1(10, "ted");
Person p2 = p1;
다음의 예는 복사 대입 연산자이다.
Person p1(10, "ted");
Person p2(22, "Kong");
p2 = p1;
복사 생성자의 두번째 예제와 복사 대입 연산자의 예제의 미묘한 차이점이 존재한다.
생성시기에 대입연산자 "="를 이용해서 대입을 하면 복사 생성자가 호출이 되고
생성후 대입연산자 "="를 이용해서 대입을 하게되면 복사 대입연산자가 호출이 된다.
전체 예제
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 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 | #include <iostream> #include <string> using namespace std; class Person { public: Person(int age, const string& name) { this->age = age; this->name = name; } Person(const Person& rhs) { cout<<"copy constructor"<<endl; this->age = rhs.age; this->name = rhs.name; } Person& operator=(const Person& rhs) { cout<<"copy assignment operator="<<endl; this->age = rhs.age; this->name = rhs.name; return *this; } private: int age; string name; }; int main(void){ Person p1(10, "ted"); Person p2 = p1; Person p3(22, "kong"); Person p4(222, "KongKong"); p3 = p4; return 0; } | cs |
실행 결과copy constructorcopy assignment operator=
반응형
'C and C++' 카테고리의 다른 글
[C++][STL] size()함수 주의사항 (0) | 2020.01.29 |
---|---|
[C++] 상속 팁 overide와 final 키워드 (0) | 2019.10.13 |
[C++] new 연산자 예외처리 (0) | 2018.12.02 |
[C++] Template 템플릿에 대한 기본적인 이해 (0) | 2018.09.09 |
[C++] 상속에 대해 (0) | 2018.09.01 |