首页 > 在析构函数中delete this指针问题

在析构函数中delete this指针问题

思考:在析构函数中delete this指针,运行下面代码会产生什么样的结果呢?

#include   using namespace std;    class A{  public:  A(){  cout<<"A()"<

解析:delete p 是一个两步的过程:调用析构函数,然后释放内存(类本身占的内存)。

 

析构函数中调用delete this:上面这段程序的delete this会先调用~A()函数,然后再释放空间,这样每次调用delete都会调用~A(),而~A()又要调用delete,他们相互调用,就会形成死循环,造成堆栈溢出。

在成员函数中调用delete this:首先会调用类的析构函数,this指针已删除,会出现指针错误。

 

总结:

在成员函数中调用delete this,会导致指针错误,而在析构函数中调用delete this,出导致死循环,造成堆栈溢出。

 

更多相关:

  • initializeGL函数由于是初始化,所以只调用一次 而resizeGL和paintGL会多次调用 resizeGL在正常的情况下,触发的条件是,窗口大小发生变化时,resizeGL被调用,之后会触发paint事件,从而调用paintGL()事件处理器。 paintGL在正常的情况下,只要你移动窗口的位置,就会马上触发pain...

  • (1)如果用定时器的话,初始的时候注册一个定时器的回调函数,原型是 glutTimerFunc(unsigned int millis, void (*func)(int value), int value);         参数对应关系为:glutTimerFunc(毫秒数, 回调函数指针, 区别值); (2)写自己的回调函数 v...

  • 0x00 前置信息 VLC是一个非常庞大的工程,我从它的架构及流程入手进行分析,涉及到一些很细的概念先搁置一边,日后详细分析。 0x01 源码结构(Android Java相关的暂未分析) # build-android-arm-linux-androideabi/:第三方库。 # modules/:模块代码。 # modules/...

  •  单选 $('#tit span').click(function() {             var i = $(this).index();//下标第一种写法             //var i = $('tit').index(this);//下标第二种写法             $(this).addClass('...

  •   前  言 LiuDaP    在前端的学习中,我们必然要用到js,js可以说是前端必不可少的的东西。在学习js的过程中,我们会经常用到this这个东西,而this的指向问题就变得尤为重要。今天正好有空闲时间,就给大家详细介绍一下js中关于this的指向问题,希望能够帮助到大家。     一、this的指向原理 >>>仅仅一条就...

  • 版本:1.4.  menu的disableItem方法不能禁用使用onClick方式绑定的事件。 解决思路如下: 重写disableItem方法和enableItem方法。 /*** menu方法扩展* @param {Object} jq* @param {Object} itemEl*/ $.extend($.fn.menu.m...