我编写程序只是为了检查如果我们在类的析构函数中删除这个指针会发生什么。这是我的代码
class xxx{
public: xxx(){cout<<"constructor called"<<endl;}
~xxx(){cout<<"destructor called"<<endl;delete(this);} //deleting the 'this' pointer
};
int main(int argc, char *argv[])
{
xxx *x1=new xxx();
delete x1;
return 0;
}
当我运行这个程序时,会导致无限循环打印“desctructor called”。
答案 0 :(得分:6)
this->~destructor
被调用,然后delete(this)
将再次调用this->~destructor
,从而无限期地调用函数。
答案 1 :(得分:2)
当然,你会得到一个无限循环(或者堆栈溢出)。 delete
在释放内存之前调用析构函数,所以如果反过来试图删除已经被删除的对象,那么你就处于递归死亡螺旋中。
简单的解决方案是:不要那样做。