Chinaunix首页 | 论坛 | 博客
  • 博客访问: 7278599
  • 博文数量: 512
  • 博客积分: 12019
  • 博客等级: 上将
  • 技术积分: 6857
  • 用 户 组: 普通用户
  • 注册时间: 2005-08-01 16:46
文章分类

全部博文(512)

文章存档

2024年(2)

2022年(2)

2021年(6)

2020年(59)

2019年(4)

2018年(10)

2017年(5)

2016年(2)

2015年(4)

2014年(4)

2013年(16)

2012年(47)

2011年(65)

2010年(46)

2009年(34)

2008年(52)

2007年(52)

2006年(80)

2005年(22)

分类: C/C++

2006-07-04 15:07:47

在MFC工程中使用stl的东西的时候,总是在DEBUG时有冲突

在MFC的自动生成代码中包含了

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

如果在这段代码之后写#include 等stl的头文件,就会编译不过。
如果写在它之前,则没有问题。
但是如果要在包含文件的顺序中时时提防,总是感觉不爽.
又想把这个define删掉,不知道会引起DEBUG时不确定会出现的什么问题.
 
///////////////////////
这是mfc为了方便debug的,使得可以跟踪用new分配的空间,所以在程序中用DEBUG_NEW 来代替了 new。用DEBUG_NEW分配的空间并不等于用户企图分配的空间,它还额外分配了一些buffer,用来跟踪用户分配空间是在哪个文件,是在文件的哪一行,所以程序员在发生内存泄露时候可以方便的知道那些地方分配了空间。
所以,如果你把#include 等stl的头文件放到这些#ifdef/#endif后面的话,因为new已经被
DEBUG_NEW代替了,所以分配空间的时候也是用DEBUG_NEW来分配了,而这对于 #include 等stl的头文件 是不可知的。所以会有错误了
 
 
 可以把stl头文件放到DEBUG前面,如下
#include
#include
#include
#include
#include
using namespace std;
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
阅读(3148) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~