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 吗?