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

为着理想勇敢前进

 
 
 

日志

 
 

重载new和delete在某种程度上可以避免不同CRT之间的冲突  

2006-12-15 15:38:40|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

在Windows平台做一个面向对象的DLL的时候,重载new和delete可以解决dll的使用者和dll使用了不同的CRT导致的delete出错的问题。
考虑一个DLL中有一下代码:

class A
{
private:
A(){}
public:
static A* newInstance()
{
return new A();
}
};

这是一个工厂方法,我们希望客户使用的时候用工厂方法来获得对象,然后用delete来释放掉。但是有一个问题在于,如果不重载new和delete,并且这个newInstance也不是inline函数的话,这里的new将会使用dll中的CRT,而客户删除的时候用的delete却是客户自己的delete

解决办法就是重载delete和delete[],只要简单的调用全局delete就行了(这个全局的delete是dll用的CRT中的delete),这样客户可以放心的delete而不会有冲突。

这种做法是在gdiplus中见到的。

  评论这张
 
阅读(180)| 评论(1)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

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

页脚

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