2009-02-06 36 views
10

當你創建一個新的MFC應用程序嚮導將創建下面的代碼塊幾乎在每一個CPP文件:「#define new DEBUG_NEW」和「#undef THIS_FILE」等實際上是否有必要?

#ifdef _DEBUG 
#define new DEBUG_NEW 
#endif 

,有時它也增加了這一點:

#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 

我想刪除此代碼來自我的CPP文件,如果它是多餘的。我在VS2008上使用C++/CLI的MFC應用程序。

我已經嘗試在從CPP中刪除此代碼後運行在調試中,它似乎工作正常。 「新」ing變量工作正常,沒有泄漏,ASSERT對話框顯示正確的文件名並跳轉到違規行。

任何人都可以告訴我它做了什麼以及是否可以刪除它?

回答

10

刪除它是完全安全的。這是一個調試幫助;如果將程序退出,它將在輸出窗口中生成任何內存泄漏警告。

+0

確定嗎?在我刪除代碼塊後,VS2008仍然顯示內存泄漏對象轉儲。也許這曾經是在VC6的情況下呢? – demoncodemonkey 2009-02-06 17:25:45

+1

對不起,我剛纔意識到你說的有一個微妙之處 - 當代碼在那裏時,輸出窗口顯示包含內存泄漏的文件名和行,而不僅僅是顯示有內存泄漏。 – demoncodemonkey 2009-02-06 17:35:23

1

上的Microsoft Visual C++ 2010,我可以刪除整個代碼,並把剛剛一個新的#define 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. 
相關問題