카테고리 없음

[Effective C++] Item12_객체의 모든 부분을 빠짐없이 복사하자

해달 2018. 1. 29. 19:54

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~이라는 이름을 사용하기 마련이다.
  • 안전하고 검증된 방법이다.