对于一个普通的C++内存跟踪器,您将需要重载以下几点:
global operator new
global operator new []
global operator delete
global operator delete []
any class allocators
any in-place allocators
棘手位越来越有用的信息,重载运营商只对分配器和内存指针删除大小信息。一个答案是使用宏。我知道。讨厌。新定义
void *operator new (size_t size, char *file, int line, char *function)
{
// add tracking code here...
return malloc (size);
}
以上仅适用,如果你没有任何运营商:发生在头是从所有的源文件包括 - 一个例子:
#undef new
void *operator new (size_t size, char *file, int line, char *function);
// other operators
#define new new (__FILE__, __LINE__, __FUNCTION__)
,并创建一个源文件在课堂范围内。如果你确实有一些在类的范围内,这样做:
#define NEW new (__FILE__, __LINE__, __FUNCTION__)
并更换“新类型”与“新型”,但是这需要潜在地改变了很多代码。
由于这是一个宏,卸下内存跟踪器是相当简单的,标题变为:
#if defined ENABLED_MEMORY_TRACKER
#undef new
void *operator new (size_t size, char *file, int line, char *function);
// other operators
#define NEW new (__FILE__, __LINE__, __FUNCTION__)
#else
#define NEW new
#endif
和实现文件:
#if defined ENABLED_MEMORY_TRACKER
void *operator new (size_t size, char *file, int line, char *function)
{
// add tracking code here...
return malloc (size);
}
endif
是的,可能_CrtMemDumpAllObjectsSince是他正在寻找的。 – stephan 2009-05-26 11:54:03