항목6 - 컴파일러가 만들어낸 함수가 필요 없으면 확실히 이들의 사용을 금해 버리자.

항목6 : 컴파일러가 만들어낸 함수가 필요 없으면 확실히 이들의 사용을 금해 버리자.
 
1. 복사 생성자, 복사 대입 연산자를 public이 아닌 private 멤버로 선언하자.
 
2. private으로 선언해도 해당 클래스의 멤버 함수가 호출할 수 있으니 define 자체를 하지말자..?
private:
     HomeForSale(const HomeForSale&);
     HomeForSale& operator=(const HomeForSale&);
 
3.
class Uncopyable
{
protected:
Uncopyable() {} //생성과 소멸 허용
~Uncopyable() {}
private:
Uncopyable(const Uncopyable&); // 하지만 복사는 방지
Uncopyable& operator=(const Uncopyable&);
 
class HomeForSale: private Uncopyble {
 
};
 
위와같이 코드를 작성하면 생성자와 소멸자는 파생, 복사생성자와 복사대입연산자는 호출 방지.
 
기억하자!
컴파일러에서 자동으로 제공하는 기능을 허용치 않으려면, 대응되는 멤버 함수를 private으로 선언한 뒤, 구현은 하지 않은채로 두자. Uncopyable과 비슷한 기본 클래스를 쓰는 것도 하나의 방법.

댓글을 작성해보세요.