首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

请教高手,以下程序为什么会中断?关于STL的析构有关问题

2012-03-27 
请问高手,以下程序为什么会中断?关于STL的析构问题#include vectorusing namespace stdclass CDemo{pub

请问高手,以下程序为什么会中断?关于STL的析构问题
#include <vector>

using namespace std;

class CDemo
{
public:
CDemo():str(NULL){};
~CDemo()
{
if(str)
delete []str;
};
char* str;
};

int main()
{
CDemo d;
d.str = new char[32];
strcpy(d.str, "Microsoft Corporation");
vector<CDemo>* vec = new vector<CDemo>();
vec->push_back(d);
delete vec;
return 0;
}

[解决办法]
没有实现拷贝构造函数。
[解决办法]
不是STL本身的析构问题,是你自己的CDemo类的问题,没有重载拷贝构造函数。你可以给CDemo类增加一个构造函数:
CDemo(const CDemo& cd):str(NULL){}
试试。
[解决办法]
因为vec->push_back(d);实际上存进去的是d的一个副本,两个对象的str都指向同一块内存了,两次delete同一内容肯定会出错。
加上一个拷贝构造函数就没问题了。

热点排行