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

dem*_*key 10 c++ mfc c-preprocessor

创建新的MFC应用程序时,向导会在几乎每个CPP文件中创建以下代码块:

#ifdef _DEBUG
#define new DEBUG_NEW
#endif
Run Code Online (Sandbox Code Playgroud)

有时候它也增加了这个:

#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
Run Code Online (Sandbox Code Playgroud)

如果它是多余的,我想从我的CPP文件中删除此代码.我在VS2008上使用带有C++/CLI的MFC应用程序.

从CPP中删除此代码后,我尝试在Debug中运行,它似乎工作正常."新"变量工作正常,没有泄漏,ASSERT对话框显示正确的文件名并跳转到违规行.

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

Mar*_*som 10

删除它是完全安全的.这是一个调试辅助工具; 将其保留将在程序退出时出现的任何内存泄漏的输出窗口中生成警告.

  • 对不起,我只是意识到您所说的话很微妙-当代码在那里时,输出窗口显示文件名和包含内存泄漏的行,而不是仅仅显示内存泄漏。 (2认同)
  • 我相信THIS_FILE是DEBUG_NEW用来获取它用于泄漏报告的源文件名的东西. (2认同)