-
Effective C++...11일지 2022. 6. 10. 07:34
객체의 모든 부분을 빠짐없이 복사하자
객체를 복사하는 함수
캡슐화한 객체 지향 시스템에 객체를 복사하는 함수는 단 두 개만 존재하며 이를 객체 복사 함수라고 부른다.
- 복사 생성자 클래스 인스턴스의 레퍼런스를 인자로 받는 생성자
- 복사 대입 연산자 클래스 인스턴스의 레퍼런스를 인자로 받는 대입 연산자
문제가 발생하는 경우
문제가 되는 경우도 크게 두 가지가 있다.
- 객체 복사 함수를 따로 구현한 뒤 멤버 변수를 추가했는데 객체 복사 함수에는 추가하지 않은 경우
- 상속받은 경우 상위 클래스의 멤버 변수를 복사해주지 않은 경우
상위 클래스의 멤버 변수 복사
문제가 발생하는 경우에서 상위 클래스의 멤버 변수 복사는 상위 클래스의 객체 복사 함수를 호출해 주는 것으로 해결할 수 있다.
class PriorityCustomer : public Customer { ... };
PriorityCustomer::PriorityCustomer(const PriorityCustomer& rhs)
: Customer(rhs), 변수 복사 진행...
{
}
PriorityCustomer& PriorityCustomer::operator=(const PriorityCustomer& rhs){ Customer::operator=(rhs); 변수 복사 진행... return *this;}
※ 복사 생성자와 복사 대입 연산자에 코드 중복이 있는 경우 따로 함수를 만들어 호출하면 된다.