Visual c++ #在stdafx.h中定义新调试\u new

Visual c++ #在stdafx.h中定义新调试\u new,visual-c++,mfc,Visual C++,Mfc,我注意到我们的几个项目完成了整个项目 #ifdef _DEBUG #define new DEBUG_NEW #endif 在他们的stdafx.h 当在stdafx中指定时,此内存泄漏检测是否能按预期工作?不要将其放入stdafx.h中。这样做会给你带来意想不到的副作用 原因如下 在大多数cpp文件中,您有如下内容: #include "stdafx.h" #include <AcmeHeader.h> #include "MyHeader.h" #ifdef _DEBUG

我注意到我们的几个项目完成了整个项目

#ifdef _DEBUG
#define new DEBUG_NEW
#endif
在他们的stdafx.h


当在stdafx中指定时,此内存泄漏检测是否能按预期工作?

不要将其放入stdafx.h中。这样做会给你带来意想不到的副作用

原因如下

在大多数cpp文件中,您有如下内容:

#include "stdafx.h"

#include <AcmeHeader.h>
#include "MyHeader.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif
#包括“stdafx.h”
#包括
#包括“MyHeader.h”
#ifdef_调试
#定义新调试\u新
#恩迪夫
注意,new的重新定义应该在包含所有头之后进行。如果在stdafx.h中定义DEBUG_NEW,那么该定义也将应用于AcmeHeader.h和MyHeader.h,这可能会导致尝试重新定义运算符NEW的头出现问题


我也遇到过这样的情况,我只想删除一两个文件的“new”重新定义,但这是一种罕见的情况。

为什么会有不同?我想我曾经读过一篇文章,说不应该这样做。我在高层知道预编译头是如何工作和调试新的工作的,但在低层还不足以知道这是否会成功。我想我主要关心的是DEBUG_NEW应该指示内存分配发生在其中的文件,并且将此预处理器指令预编译到stdafx.cpp不会给出预期的输出。@user715780您可以将其作为答案发布什么发布?您可能忘记了在您的问题中提到的
“stdafx.h”
,而在您的评论中提到的
“stdafx.cpp”