WINX的STD_NEW与MFC共存问题
来源:互联网 发布:淘宝实拍保护在哪里 编辑:程序博客网 时间:2024/06/06 08:37
本文已经迁移到:http://cpp.winxgui.com/cn:std-new-conflict-with-mfc
WINX的STD_NEW与MFC共存问题
许式伟 (版权声明)
2007-3-8
事由
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。
- WINX的STD_NEW与MFC共存问题
- WINX的STD_NEW与MFC共存问题
- WINX的STD_NEW与MFC共存问题
- WINX的STD_NEW与MFC共存问题
- WINX的STD_NEW与MFC共存问题
- OpenCV 与 MFC 共存
- 有关ListView与Button的共存问题
- ListView 与EditText共存的焦点问题
- IIS与Tomcat共存的问题
- 解决ListView与Button共存的问题
- Dialog与软键盘共存的问题
- struts2与servlet共存问题
- listView与Button共存问题
- 对话框与Toast共存问题
- Python2.*与Python3.*共存问题
- Python2.*与Python3.*共存问题
- python2 与python3共存问题
- Sql server2005与Sql server2000共存的问题
- C++Primer 读书笔记 第一篇 C++ 概述
- 还是朋友--张雨生
- 参与的Pb算法:5个数的排列组合。
- 讲不出再见--谭咏麟
- 面向对象的设计原则之总结
- WINX的STD_NEW与MFC共存问题
- J2EE的13种核心技术
- 如何输出文件的最后一行
- ASP.NET中启用Windows集成验证,怎样在调用System.DirectoryServices下的组件时传递安全上下文,也就是说当前用户凭据,来实现权限管理
- 今天天气不错,挺风和日立的。
- DRAW: 基于 AJAX 的在线绘图工具
- 超时空的爱情--胡彦斌
- 国务院关于发展城市社区卫生服务的指导意见
- 多用户应用程序中应注意的其它问题(3)