我已经覆盖了新的,以便我可以跟踪内存分配.附加参数,例如__FILE__,__LINE__,模块名等在所添加的#define.
但是,我想将调用对象的地址添加到参数中,以便在查找问题时可以回溯分配.最简单的方法是将"this"添加到这些附加参数(这意味着调用者的地址被传递到我的自定义alloc内容中).
不幸的是,我们的代码中有很多单例,这意味着一堆静态成员函数调用new.编译器会抛出错误C2671: '...' : static member functions do not have 'this' pointers
是否有一种解决方法,我可以在不使用的情况下获取对象的地址this,这也可以实现它在静态方法中并传递null说?
或者有可能我的#define新方法会在静态方法中识别并切换到不同的定义吗?
重要的是我不会影响现有的项目代码 - 我不想强迫开发人员使用像staticnew这样的自定义方法,因为它是在静态方法中 - 他们应该继续使用像普通的新内存和这种内存跟踪的东西一切都在后台进行......
您肯定无法确定#define宏是否在静态方法中.您甚至不应该使用#define new它,因为它违反了标准(即使所有编译器都支持它).您的宏也会给那些想要为其类重载operator new的人带来麻烦.
一般来说,我建议不要使用这种内存调试.有许多成熟的内存调试器在调试内存错误时可以做得更好.最着名的是Valgrind.
为您的问题提供简单的答案 - 您解决问题的方式没有干净的解决方案.