龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > C/C++开发 >

《Effective C++》读书笔记06:如果不要编译器自动生成的函数,就明确拒绝

时间:2009-12-22 15:42来源:未知 作者:admin 点击:
分享到:
有时候,我们需要定义一些独一无二的类,这些类是如此的特别,以至于我们不能将其拷贝或者赋值: 1 class Family {}; 2 3 Family mine; 4 Family your; 5 Family her(mine);//不能通过编译 6 mine = your

  有时候,我们需要定义一些独一无二的类,这些类是如此的特别,以至于我们不能将其拷贝或者赋值:

1 class Family {};

2

3 Family mine;

4 Family your;

5 Family her(mine);//不能通过编译

6 mine = your;     //也不能通过

  可是上一个专题讲到,即使我们不定义copy构造函数和copy assignment函数,编译器还是会自动定义它们,所以,为了阻止上述行

为,我们一般的解决方法就是:

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 };

精彩图集

赞助商链接