我已经为我的项目覆盖了全局 new 和 delete 运算符,但是我无法让它与 Boost 库一起使用。我在这里实现了解决方案:Macro to replace C++ operator new以解决我遇到的多个重载问题。但是,Boost 库有一个恼人的习惯,即使用operator new
而不是简单地使用new
离开预处理器进行扩展:
::operator new(n);
至:
::operator (__file__ = "someFile.cpp", __line__ = 123) && 0 ? NULL : new(n);
是否可以编写另一个宏来删除这些“不需要的”扩展?例如,我尝试编写:
#define (operator (file, line) && 0 ? NULL :) operator new
但显然宏的标识符部分不允许使用括号。如何使用 Boost 库,但仍能获得内存分配跟踪?