标签:
有些情况自己是不希望生成拷贝构造函数以及拷贝赋值运算符的,这种时候不能只是自己不去编写这些函数,因为这样编译器会自动的去生成这些函数。保险一点的做法是将拷贝构造函数以及拷贝赋值运算符都声明为private的。这样既阻止了编译器生成默认的版本,而且又阻止了别人去调用它。
class HomeForSale//很明显,销售的两个方子一般内容都是不相同的,所以拷贝构造函数以及 { //拷贝赋值运算符一般都是不需要的 public: ... private: ... HomeForSale(const HomeForSale &);//注意,这两个函数只有声明 HomeForSale operator=(const HomeForSale &); }
但是这里还存在一个问题就是友元函数以及其他的成员函数还是有可能会调用这两个实际上没有底定义的函数,所以这里还要用到另外一种技巧:可以让HomeForSale继承自一个uncopyable基类即可:
class UnCopyAble { protected: UnCopyAble(){} ~UnCopyAble(){} private: UnCopyAble(const UnCopyAble & ){}//禁止拷贝。 UnCopyAble & operator(const UnCopyAble & ) }
再让HomeForSale继承自UnCopyAble:
class HomeForSale : public UnCopyAble { public: ... private: ... }
条款6:如果不想使用编译器自动生成的函数,就应该明确的拒绝。
标签:
原文地址:http://www.cnblogs.com/-wang-cheng/p/4854941.html