因为C++编译器默认会为你产出一份 copy constructor 和 copy assignment 但你不想你的对象具有copy的功能,你的目标是要阻止copying!一般人会说只要声明 private copy constructor 如下
class HomeForSale{ public: ... private: HomeForSale(const HomeForSale&); HomeForSale& operator=(const HomeForSale&)
?有了上述的class定义,当客户企图拷贝HomeForSale对象,编辑一会阻止他.如果你不慎在member函数或friend函数内那么做,轮到连接器发出抱怨.
讲连接器错误移至编译器是可能的.只要将copy constructor 和 copy assignmentcaozuofu.html" target="_blank">操作符声明为private,但不是在HomeForSale自身,而是在一个专门为了阻止copying动作而设计的base class内.如下
class Uncopyable protected: Uncopyable() {} ~Uncopyable() {} private: Uncopyable(const Uncopyable&); Uncopyable& operator=(const Uncopyable&);
?为了阻止HomeForSale对象的拷贝,我们唯一需要做的就是继承Uncopyable:
class HomeForSale : private Uncopyable?这样是可行的,因为只要有任何人(甚至是member函数或friend函数试图拷贝HomeForSale对象,编译器便会试着生成一个copy constructor操作符,这些函数的"编译器生成版"会尝试调用其base class,那些调用会被编译器拒绝,因为其base class具有private constructor)