【发布时间】:2012-10-10 08:38:10
【问题描述】:
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 就拉入标题?
【问题讨论】:
标签: c++ visual-c++ c++03