创建新的MFC应用程序时,向导会在几乎每个CPP文件中创建以下代码块:
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
有时它也会添加:
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
我想从我的CPP文件中删除此代码,如果它是多余的。我在VS2008上使用带有C ++ / CLI的MFC应用程序。
我从CPP中删除此代码后尝试在Debug中运行,它似乎工作正常。 “新”变量工作正常,没有泄漏,ASSERT对话框显示正确的文件名并跳转到违规行。
任何人都可以告诉我它的作用以及删除它是否安全?
答案 0 :(得分:10)
删除它是完全安全的。这是一个调试辅助工具;将其保留将在程序退出时在输出窗口中生成警告。
答案 1 :(得分:1)
在Microsoft Visual C ++ 2010上,我可以删除整个代码并在标题中只放置一个#define NEW DEBUG_NEW,我仍然可以获得正确的内存泄漏报告,例如
Detected memory leaks!
Dumping objects ->
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\strcore.cpp(156) : {7508} normal block at 0x029B9598, 54 bytes long.
Data: < > E4 B8 C9 00 12 00 00 00 12 00 00 00 01 00 00 00
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\strcore.cpp(156) : {7501} normal block at 0x029B94A8, 28 bytes long.
Data: < > E4 B8 C9 00 05 00 00 00 05 00 00 00 01 00 00 00
f:\source\agent\agent\deviceid.cpp(21) : {7500} normal block at 0x029CDFC0, 8 bytes long.
Data: < > A8 95 9B 02 B8 94 9B 02
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\strcore.cpp(156) : {6786} normal block at 0x029C0D88, 160 bytes long.
Data: < G > E4 B8 C9 00 19 00 00 00 47 00 00 00 01 00 00 00
f:\source\agent\sysinfo\sysinfo.cpp(27) : {6733} normal block at 0x029B84D8, 92 bytes long.
Data: < > 00 00 00 00 00 10 00 00 00 00 01 00 FF FF FE 7F
Object dump complete.