C++ dele this 指针

本文探讨了在C++中如何在析构函数和其他函数中使用`delete this`,强调了确保对象在堆上分配的重要性,以及`delete this`之后不再能访问对象成员的规则。此外,还提到了《More Effective C++》中关于确保对象在堆上创建的建议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(1)析构函数内调用delete this
  • 析构函数内调用deletethis 可以理解为 函数无终止条件自我递归调用, 最终导致栈溢出。(注意:这里无论析构函数是否是虚函数)
(2)除析构函数外其他函数
  • 都可以,许多老一点的库代码里都有类似releasexxx()或者是recycleself()的函数
(3)使用delete this注意事项
  • 3.1 要保证对象被分配到heap内,this对象是必须是用 new操作符分配的(亦不能用placement new,因为无法确定内存位置是否在heap内);
  • 3.2 delete this后,不能访问该对象任何的成员变量及虚函数(delete this回收的是数据,这包括对象的数据成员以及vtable,不包括函数代码);不能再访问this指针。换句话说,你不能去检查它、将它和其他指针比较、和 NULL比较、打印它、转换它,以及其它的任何事情;
(4)如何要求对象产生于Heap内
  • 根据《More effective C++》书中条款27,保证以上禁忌列表基本手段:
  • 4.1将析构函数protected化,保证继承有效,同样保证对象必须使用new在堆上分配内存;
  • 4.2在基类中提供型如destroy()函数,里面仅有一句delete this--以保证第三方能够将分配的内存回收;

    void destory const() { delete this; }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值