读书人

在win32 dll中满载operator delete(vo

发布时间: 2012-09-18 16:21:42 作者: rapoo

在win32 dll中重载operator delete(void *p) ?
看more effective c++中说可以重载operator new 和 operator delete.

我把new用宏定义为多参数形式,如new(__FILE__, __LINE__),把operator new定义成对应的形式,如void* __cdecl operator new(size_t, char*, int),这样不论是放到dll或者.h .cpp放到工程目录下都可以.

但是重载operator delete就会有问题:
1.我如果把operator重载为对应operator new的多参数形式,win32 dll或者.h .cpp到工程目录下都可以,但是测试delete不会进入我重载的operator delete中.为什么?
2.重载operator delete(void*)的话,把.h .cpp放到工程目录下,这时候测试delete会进入我重载的operator delete中.为什么?CRT的operator delete不会与我定义的冲突吗?
3.但是在win32 dll中,会报error C2375: 'operator delete' : redefinition; different linkage的错.为什么?

谢谢!





[解决办法]
你打开new.h或者new文件,看一下编译器给的申明。
估计你漏了throw方面的异常规格说明。

[解决办法]
搜索了半天,给你找到一篇相关资料,应该可以解决你的问题:http://blog.vckbase.com/bruceteen/archive/2008/08/13/34641.html

读书人网 >C++

热点推荐