请问高手,以下程序为什么会中断?关于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同一内容肯定会出错。
加上一个拷贝构造函数就没问题了。