程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> WINX的STD_NEW與MFC共存問題

WINX的STD_NEW與MFC共存問題

編輯:關於C++

事由

WINX的 AutoFreeAlloc 受到了廣泛的關注,很多讀者反應這對他們很受啟發。

昨天有讀者反饋了 STD_NEW 與 MFC 不能共存的問題,我在這裡想談一下這個問題。

原因

MFC 在源代碼文件中生成了如下調試代碼:

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

這裡定義了一個名為 new 的宏。這導致MFC程序中不能使用所有非標准形式的 new 操作 符。這是 MFC 本身的一個缺陷。

STD_NEW 中使用了 placement new,這個 new 操作符在C++標准庫 <new> 或者 <new.h> 頭文件中定義。

解決方案

我推薦的解決方案是,刪除MFC在源代碼文件中的調試代碼中的如下語句:

#define new DEBUG_NEW

不過這帶來另一個問題,在該源代碼文件中發生的內存洩漏,MFC程序無法檢測到了。

要解決這個問題也很簡單,如果要用到 new 的地方,直接用 DEBUG_NEW 代替好了。例如 :

Type* a = new Type(arg1, arg2);

改為

Type* a = DEBUG_NEW Type(arg1, arg2);

個人推薦

我個人的推薦是,不只是在要使用 WINX 的 STD_NEW 時候這樣做,而是,所有代碼中都 使用DEBUG_NEW,而不是直接使用new。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved