“#define new DEBUG_NEW”和“#undef THIS_FILE”等实际上是否必要?

时间:2009-02-06 16:59:57

标签: c++ mfc c-preprocessor

创建新的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对话框显示正确的文件名并跳转到违规行。

任何人都可以告诉我它的作用以及删除它是否安全?

2 个答案:

答案 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.