delate this 不可用的原因解析
delate this 不可用的原因解析
首先,了解一下this指针:
当一个对象声明时,系统会为这个对象分配一块内存空间,this指针指向这块内存空间,这块空间里面存着对象的数据成员和虚函数表指针。
#include
using namespace std; class A
{
public: A() { cout<<"A()"<cout<<"~A()"<//造成死循环打印delete this; }
}; int main()
{ A a; return 0;
}
当使用delete的时候:
第一步,针对此内存会有一个(或更多)析构函数被调用,
第二步才会释放该内存。
1、析构函数中调用delete this:上面这段程序的delete this会先调用~A()函数,然后再释放空间,这样每次调用delete都会调用~A(),而~A()又要调用delete,他们相互调用,就会形成死循环,造成堆栈溢出。
2、在成员函数中调用delete this:首先会调用类的析构函数,this指针已删除,会出现指针错误。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
