1
我已經注意到,我們的幾個項目做整體的#define DEBUG_NEW新Stdafx.h中
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
的事情在他們的stdafx.h中。
在stdafx中指定時,此內存泄漏檢測是否按預期工作?
我已經注意到,我們的幾個項目做整體的#define DEBUG_NEW新Stdafx.h中
#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中定義了DEBUG_NEW,那麼該定義也將應用於AcmeHeader.h和MyHeader.h,這可能會導致嘗試重新定義運算符new的頭部問題。
我也碰到過一些情況,我想刪除只有一個或兩個文件的「新」的重新定義,但這是一種罕見的情況。
爲什麼會有所作爲? – IInspectable
我以爲我讀過一次,不應該這樣做。 我很瞭解預編譯頭文件是如何工作的,DEBUG_NEW是如何工作的,但是在低層次上不足以知道這是否能成功工作。我認爲我主要關心的是DEBUG_NEW應該表明內存分配發生的文件,並且將此預處理器指令預編譯到stdafx.cpp中將不會提供預期的輸出。 – TheClassic
@ user715780你可以發表這個答案 –