《Effective C++》读书笔记06:如果不要编译器自动生成的函数,就明确拒绝
有时候,我们需要定义一些独一无二的类,这些类是如此的特别,以至于我们不能将其拷贝或者赋值:
1 class Family {}; 2 3 Family mine; 4 Family your; 5 Family her(mine);//不能通过编译 6 mine = your; //也不能通过 |
1 class Family 2 { 3 public: 4 5 private: 6 Family(const Family&); //我们将其定义在private中 7 Family& operator=(const Family&); //并且故意不实现它们:) 8 } |
这样,如果用户无意中调用它们,就会在编译期间得到错误。而如果你在member函数和friend函数中调用,则会是连接器发出抱怨;
也可以将连接期间的问题移到编译期间,可以这么做:
1 class Uncopyable 2 { 3 protected: 4 Uncopyable() {}; 5 ~Uncopyable() {}; 6 private: 7 Uncopyable(const Uncopyable&); //阻止copy 8 Uncopyable& operator=(const Uncopyalbe&); //阻止 9 }; 10 11 class Family: private Uncopyable //继承以后就完成了 12 { 13 14 }; |