当前位置:天才代写 > tutorial > C语言/C++ 教程 > WINX的STD_NEW与MFC共存问题

WINX的STD_NEW与MFC共存问题

2017-11-03 08:00 星期五 所属: C语言/C++ 教程 浏览:947

事由

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。

 

    关键字:

天才代写-代写联系方式