事由
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。