在生成的代码里经常看到如下代码:
#ifdef _DEBUG
#undef THIS_FILE //取消定义
static char THIS_FILE[]=__FILE__; //将文件名放到THIS_FILE中
#define new DEBUG_NEW //定义调试宏,将new重定义为DEBUG_NEW
#endif
大体意思就是注释里的了,DEBUG_NEW是个调试宏,用于在调试的时候为寻找内存泄漏提供方便,看下源代码就清楚了:
调试版本的new操作函数:void* AFX_CDECL operator new(size_t nSize, LPCSTR lpszFileName, int nLine);
宏替换:#define DEBUG_NEW new(THIS_FILE, __LINE__) //文件名、行号被传入,供调试输出。
THIS_FILE就是上面定义的了,__LINE__就是行号了
这样在DEBUG模式下,当试图用new分配内存时,就用DEBUG_NEW代替new,而DEBUG_NEW不仅需要要分配内存块的大小,还需要文件名,行号,这样当在调试模式下当发
生内存泄漏时,可以很容易的定位到发生问题的代码处