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指针已删除,会出现指针错误。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部