Microsoft运行时库提供分配函数的调试版本.对于C,这是具有签名的operator new的调试变体:
void *operator new(size_t size,int blockType,const char *filename,int linenumber);
并且宏被定义为
#define DEBUG_NEW new(_NORMAL_BLOCK,__FILE__,__LINE__)
现在要对所有分配进行检测,通常可以定义
#if defined DEBUG_NEW #define new DEBUG_NEW #endif
但是,这个定义会破坏使用placement new的任何地方,因为这两组参数最终都是语法错误.现在,我可以轻松处理代码中的少数用法,但标准库和boost使用新的位置.因此,定义全局意味着在定义之前包含许多内容并且会减慢编译速度.
那么有没有办法在我们的代码中设置分配而不是仅仅因为它们包含新的放置而不必将上一个定义放在所有文件中或者手动编写DEBUG_NEW?
解决方法
#pragma push_macro("new") #undef new new(pointer) my_class_t(arg1,arg2); #pragma pop_macro("new")
要么
#pragma push_macro("new") #undef new #include <...> #include <...> #include <...> #pragma pop_macro("new")