Item5中提到:基类如果把类内默认函数(构造或copy assignment操作符)设置为private,子类将拒绝生成。
但这并不绝对安全。因为成员函数和友元函数还是可以调用private函数。
这里提供一种方案:在类中声明为private,但不去实现。
实现上,可以定义一个专门未来阻止该操作的基类。
如:阻止对象呗拷贝的Uncopyable基类:
class UnCopyable {
protected:
UnCopyable() {}
~UnCopyable() {}
private:
UnCopyable(const UnCopyable&);
UnCopyable& operator=(const UnCopyable&);
};
class HomeForSale : private Uncopyable {
...
};
写在最后
C++11中,关键字=delete,已经完美解决该问题。对于不想被编译器默认生成的函数,可以在声明时,加上“=delete”