해결책
class HomeForSale {
public:
...
private:
...
HomeForSale(const HomeForSale&); // 선언만 (정의 없음)
HomeForSale& operator=(const HomeForSale&);
};
HomeForSale 객체를 복사하려는 클라이언트의 시도를 차단함. 또한, 멤버 함수나 friend 함수에서 실수로 이를 시도하더라도, **링커(linker)**가 이를 거부하게 된다.링크 타임 에러를 컴파일 타임 에러로 변경하기
class Uncopyable {
protected: // 생성과 소멸 허용
Uncopyable() {} // 파생 객체의
~Uncopyable() {} // 생성과 소멸 허용
private:
Uncopyable(const Uncopyable&); // 복사 방지
Uncopyable& operator=(const Uncopyable&);
};
class HomeForSale: private Uncopyable { // 클래스는 더 이상
... // 복사 생성자나 복사 할당 연산자를 선언하지 않음
};
HomeForSale 객체를 복사하려고 할 때, 복사 생성자와 복사 할당 연산자를 생성하려 함.Uncopyable 의 private으로 선언되어 있는 복사 생성자와 복사 할당 연산자의 호출이 거부됨.💫Things to Remember 컴파일러가 자동으로 제공하는 기능을 비활성화하려면, 해당 멤버 함수를 private으로 선언하고 구현하지 않으면 된다.