delate this 不可用的原因解析
首先,了解一下this指针:
当一个对象声明时,系统会为这个对象分配一块内存空间,this指针指向这块内存空间,这块空间里面存着对象的数据成员和虚函数表指针。
#include <iostream>
using namespace std;
class A
{
public:
A()
{
cout<<"A()"<<endl;
}
~A()
{
cout<<"~A()"<<endl; //造成死循环打印
delete this;
}
};
int main()
{
A a;
return 0;
}
当使用delete的时候:
第一步,针对此内存会有一个(或更多)析构函数被调用,
第二步才会释放该内存。
1、析构函数中调用delete this:上面这段程序的delete this会先调用~A()函数,然后再释放空间,这样每次调用delete都会调用~A(),而~A()又要调用delete,他们相互调用,就会形成死循环,造成堆栈溢出。
2、在成员函数中调用delete this:首先会调用类的析构函数,this指针已删除,会出现指针错误。