Item12_객체의 모든 부분을 빠짐없이 복사하자
챕터 핵심 내용
- 객체 복사 함수는 주어진 객체의 모든 데이터 멤버 및 모든 기본 클래스 부분을 빠뜨리지 말고 복사해야 한다.
- 클래스의 복사 함수 두 개를 구현할 때, 한 쪽을 이용해서 다른 쪽을 구현하려는 시도는 하지 말자.
- 객체 복사 함수(object copying function) : 복사 생성자, 복사 대입 연산자. 복사되는 객체가 갖고 있는 데이터를 빠짐없이 복사한다.
- 부분 복사(partial copy)가 일어나도 컴파일러는 일언반구조차 하지 않는다.
- 파생 클래스에 대한 복사 함수를 정의하겠다고 결심했다면, 기본 클래스 부분을 복사해서 빠뜨리지 않도록 각별히 주의해야 한다.
class Base { ... };
class Derived : public Base { ... };
Derived::Derived(const Derived& other) : Base(other) { ... }
Derived& Derived::operator=(const Derived& other) { Base::operator=(other); }
- 코드 중복을 피하고 싶다면 중복되는 부분을 별도의 멤버 함수에 분리해 놓은 후에 이 함수를 호출하자.
- private 멤버로 init~이라는 이름을 사용하기 마련이다.
- 안전하고 검증된 방법이다.