码迷,mamicode.com
首页 > 其他好文 > 详细

[百度空间] [原] 全局operator delete重载到DLL

时间:2015-05-18 20:16:06      阅读:147      评论:0      收藏:0      [点我收藏+]

标签:

由于很久没有搞内存管理了,很多细节都忘记了
今天项目要用到operator delete重载到DLL,发现了问题,网上搜索以后,再对比以前写的代码,发现了问题:
原来MSVC默认的operator new(size_t) 和operator delete(void*)虽然可以重载,

但是不能封装到DLL中,编译会报C2375 DLL linkage错误,解决方法很简单: 用inline函数包一下DLL导出就可以了


同时为了不跟MFC等三方库的operator new 冲突,最好加一个自定义参数:
typedef strcut SMemInfo {}MEMINFO;

#if XXXDEBUG
extern DLL_ENTRY void* operator new(size_t size, const char* file, int line, const MEMINFO* dummy);

extern DLLENTRY void operator delete(void* ptr,const char* file, int line,  const MEMINFO* dummy);//匹配版本用于exception

 

inline void operator delete(void* ptr)

{

   return ::operator delete(ptr,__FILE__,__LINE__, (const MEMINFO*)NULL);

}

#else

extern DLL_ENTRY void* operator new(size_t size, const MEMINFO* dummy);

extern DLLENTRY void operator delete(void* ptr,const MEMINFO* dummy);//匹配版本用于exception

 

inline void operator delete(void* ptr)

{

   return ::operator delete(ptr, (const MEMINFO*)NULL);

}

#endif

[百度空间] [原] 全局operator delete重载到DLL

标签:

原文地址:http://www.cnblogs.com/crazii/p/4512790.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!