浅谈C++ delete this


 1.为什么需要delete this?

     delete this,可以让某种类型的对象拥有自杀的能力。有些设计模式,如状态模式,在状态转换可能需要使用delete this。

 2.使用delete this使用的注意事项

     2.1要保证对象被分配到heap内,this对象是必须是用 new操作符分配的(亦不能用placement new,因为无法确定内存位置是否在heap内

     2.2delete this后,不能访问该对象任何的成员变量及虚函数(delete this回收的是数据,这包括对象的数据成员以及vtable,不包括函数代码);

     2.3delete this后,不能再访问this指针。换句话说,你不能去检查它、将它和其他指针比较、和 NULL比较、打印它、转换它,以及其它的任何事情;

 3.如何要求对象产生于Heap内

    根据《More effective C++》书中条款27,保证以上禁忌列表基本手段:

    3.1将析构函数protected化,保证继承有效,同样保证对象必须使用new在堆上分配内存;


    3.2在基类中提供型如destroy()函数,里面仅有一句delete this--以保证第三方能够将分配的内存回收;

           

   void destory const() {delete this;}


    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值