10

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

谁能告诉我它的作用以及删除它是否安全?

4

2 回答 2

10

删除它是完全安全的。这是一个调试辅助工具;将其保留将在程序退出时的任何内存泄漏的输出窗口的警告中生成更好的详细信息。如果您删除它,您仍然会收到内存泄漏报告,但只是没有任何有关它们发生在源代码中的位置的详细信息。

于 2009-02-06T17:13:17.197 回答
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.
于 2012-01-18T14:28:30.397 回答