注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Mihooke's blog

IT之恋

 
 
 

日志

 
 

DISALLOW_COPY_AND_ASSIGN的问题  

2015-05-13 22:30:12|  分类: C++ |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
在项目代码中我们经常会看到如下的代码:

#define    DISALLOW_COPY_AND_ASSIGN(TypeName) \    

TypeName(const TypeName&);         \   

 TypeName&operator=(const TypeName&)

#define DISALLOW_COPY(__TypeName) __TypeName(const __TypeName&);

 

#define DISALLOW_ASSIGN(__TypeName) __TypeName& operator=(const __TypeName&)

其实这是用来限制类型复制、拷贝和默认的一些转换操作等对class类型变量的误操作,明确拒绝不需要的拷贝构造函数和赋值函数。
如下:

class X509Name{

 

public:

  X509Name(void);

  ~X509Name(void);

private:

  DISALLOW_COPY(X509Name);

  DISALLOW_ASSIGN(X509Name);

 

};

1.声明了拷贝构造函数和赋值函数,阻止了编译器暗自创建的专属版本.

2.声明了private,阻止了外部对它们的调用.

3.不定义它们,可以保证成员函数和友元函数调用它们时,产生一个连接错误.

成员函数和友元函数企图拷贝对象时,会产生连接器错误.

把 DISALLOW_COPY_AND_ASSIGN放在类声明的最后,还符合Google编程规范

用来限制类型复制、拷贝和默认的一些转换操作等对class类型变量的误操作


  评论这张
 
阅读(47)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017