我正在开发一个内存泄漏工具。在这个过程中,我正在重载new和delete运算符。它工作得很好。但是我要为其创建的代码大约有15000行。我不能更改现有的代码,只能将内存泄漏工具函数调用到现有代码中。现有代码包含STL容器(如列表、映射、栈等)。STL容器也调用new和delete运算符来分配或释放内存。我希望STL容器调用的是没有被重载的new和delete运算符,而不是已经被重载的new和delete运算符。
int *iptr = new int[10] ----> should call overloaded new[]
delete [] iptr -------------> should call overloaded delete[]
map.insert(10) -------------> should call default new[] ( which are in new.h)
map.erase() ---------------> should call default delete[] ( which are in new.h)
我该怎么做呢?任何帮助都将不胜感激。
抱歉,我忘记提到我正在使用以下宏替换new和delete:
#define new DEBUG_NEW
#define DEBUG_NEW TrackMemory(__FILE__, __LINE__) ->* new
#define delete TrackDelete(__FILE__, __LINE__); delete
在这里,TrackMemory用于跟踪内存,而new用于分配内存,与delete相同。我的工具也很好用,但当涉及到STL容器时,它会给出错误的结果,因为它们只使用重载的new。请帮帮我。