본문 바로가기
C,C++

[Effective C++] 항목 12 : 객체의 모든 부분을 빠짐없이 복사하자.

by matters_ 2019. 7. 30.

요약

  • 객체 복사 함수는 주어진 객체의 모든 데이터 멤버 및 모든 기본 클래스 부분을 빠뜨리지말고 복사해야한다.
  • 클래스의 복사 함수 두 개를 구현할 때, 한쪽을 이용해서 다른 쪽을 구현하려는 시도는 절대로 하지 마세요. 그 대신, 공통된 동작을 제 3의 함수에다 분리해 놓고 양쪽에서 이것을 호출하게 만들어서 해결하자!

좀 더 구체적으로 서술하자면 복사생성자와 복사대입연산자를 자신이 만들어서 쓴다면 포함된 모든 객체를 빠짐없이 복사하자는 이야기이다. 컴파일러가 경고도 내지 않으니 조심하자고 필자는 말한다.

또한 상속을 할때도 상속받은 클래스에서 복사대입연산자를 구현하면 상속된 클래스까지 명시적으로 해주자! 다음과 같이!

PriorityCustomer::Prioritycustomer(const PriorityCustomer& rhs)
: Customer(rhs),
  priority(rhs.priority)
{
...
}

PriorityCustomer& PriorityCustomer::operator=(const PriorityCustomer& rhs)
{
    Customer::operator=(rhs);
    priority = rhs.priority;
    
    return *this;
 }

 

댓글