2016-04-21 44 views
1

我已經注意到,我們的幾個項目做整體的#define DEBUG_NEW新Stdafx.h中

#ifdef _DEBUG 
#define new DEBUG_NEW 
#endif 

的事情在他們的stdafx.h中。

在stdafx中指定時,此內存泄漏檢測是否按預期工作?

+0

爲什麼會有所作爲? – IInspectable

+1

我以爲我讀過一次,不應該這樣做。 我很瞭解預編譯頭文件是如何工作的,DEBUG_NEW是如何工作的,但是在低層次上不足以知道這是否能成功工作。我認爲我主要關心的是DEBUG_NEW應該表明內存分配發生的文件,並且將此預處理器指令預編譯到stdafx.cpp中將不會提供預期的輸出。 – TheClassic

+0

@ user715780你可以發表這個答案 –

回答

1

不要把它放在stdafx.h中。這樣做會給你帶來不希望的副作用。

這是爲什麼。

在大多數cpp文件,你有這樣的事情:

#include "stdafx.h" 

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

#ifdef _DEBUG 
#define new DEBUG_NEW 
#endif 

注意的新的重新定義明確應該包含所有的頭後發生。如果在stdafx.h中定義了DEBUG_NEW,那麼該定義也將應用於AcmeHeader.h和MyHeader.h,這可能會導致嘗試重新定義運算符new的頭部問題。

我也碰到過一些情況,我想刪除只有一個或兩個文件的「新」的重新定義,但這是一種罕見的情況。