可以将拷贝构造函数或者拷贝赋值运算符声明为private的来阻止某些函数的默认操作。一般而言这样做并不安全,因为成员函数和友元函数可以调用你的private函数。那么我们可以将它声明为private的并且不去定义它,那么我们的目的就可以达到了。我们可以专门为阻止copying动作而设计一个基类:
class Uncopyable
{
protected:
Uncopyable () { }
~ Uncopyable () { }
private:
Uncopyable(const Uncopyable&);
Uncopyable& operator= (const Uncopyable&);
};
为求阻止HomeForSale对象被拷贝,我们唯一需要做的就是继承Uncopyable:
class HomeForSale : private Uncopyable
{
…
};