当前位置:编程学习 > VC++ >>

一个很简单但是完全没头绪的问题:VC++,vector 析构函数

下面的代码再简单不过了:有一个类叫Base,它里面只有一个指针成员int *p,并且在构造函数中分配空间,然后在析构函数中被delete掉。
mian函数中申请了一个vector<Base> vec,然后生成一个对象并加入到vector里。

结果在main函数结束的时候就会弹出这个错误:
_BLOCK_TYPE_IS_VALID(phead->nBlockUse)
可是我觉得程序完全没错误啊,还请高手指点,不盛感激

//main.cpp
#include <vector>
#include "Base.h"
using namespace std;

void main()
{
 vector<Base> vec;
 Base a;
 vec.push_back(a);
}

//Base.h
class Base 
{
public:
 Base();
 virtual ~Base();
private:
 int* p;
};

//Base.cpp
#include "Base.h"
Base::Base()
{
 p = new int;
}

Base::~Base()
{
 delete p;
}

答案:

class Base 没有拷贝构造函数和赋值函数,运行vec.push_back(a);时,程序会这样:Base tmp;

由于没有显示的拷贝构造函数,那么默认只这样 p = a.p; 只是拷贝了p的值,当程序退出时,

析构函数运行两次 ,你想下,连续两次 delete p 会有什么后果。

上一个:寻找会VC++的人.帮我弄个东西
下一个:VC++写程序为什么不直接case IDC_EXIT,而是用WM_CLOSE

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,