对象析构谈—— delete this 的使用及注意事项

In order to understand "delete this" :


First Step - dive into "delete p"

delete p 执行了哪些步骤?
delete p
是一个两步的过程:调用析构函数(释放类里边涉及new的内存),然后释放内存(类本身占的内存)。


delete p产生的代码看上去是这样的(假设是Object*类型的):

delete原语可以看作如下这样一个过程:
p->~Object();
p->operator delete(p);

p->~Object() 语句调用p指向的Object对象的析构函数。
p->operator delete(p)
语句调用对象p的内存释放原语 void operator delete(void* p)。如果没有实现该方法,将调用系统的内存释放原语::operator delete(ptr)做释放该对象内存的操作。当然细节上并不这么简单,我们最后的实验部分会详细讨论

 

Second Step - "delete this"

成员函数调用delete this合法吗?
只要你小心,一个对象请求自杀(delete this)是可以的。

以下是我对小心的定义:

你必须100%的确定,this对象是用 new分配的(不是用new[],也不是用定位放置 new,也不是一个栈上的局部对象,也不是全局的,也不是另一个对象的成员,而是明白的普通的new)。

你必须<

  • 3
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值