科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件WINX的STD_NEW与MFC共存问题

WINX的STD_NEW与MFC共存问题

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

本文主要讲了WINX的STD_NEW与MFC共存问题。

作者:许式伟 来源:CSDN 2008年2月13日

关键字: 共存 MFC STD_NEW Windows

  • 评论
  • 分享微博
  • 分享邮件

事由

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。


查看本文来源
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章