如果在构造函数中用到了 new之类的初始化操作,在析构函数调用了delete.
如果没有禁用拷贝构造,复制赋值 那么在进行
A a; A b= a;
操作时,
b 进行析构的时候,会把a 申请的内存给析构掉,会造成a 里面的对象已经释放,导致不可预计的结果。
class example
{
public:
example()
{
base_ptr_ = new char[256];
strcpy(base_ptr_,"lee");
}
void show()
{
printf("the name is %s\n",base_ptr_);
}
~example()
{
delete base_ptr_;
base_ptr_ = NULL;
}
private:
char* base_ptr_;
// example(const example&);
// example operator = (const example&);
};
int _tmain(int argc, _TCHAR* argv[])
{
example __ex1;
__ex1.show();
example __ex2 = __ex1;
return 0;
}
当 __ex2 进行析构的话,就会出现二次删除的情况,base_ptr_ 已经在第一次的时候删除了。