成员函数中的'删除这个'的用处[重复]

  可能重复:   可以使用“删除此”吗?删除当前对象?   对象是否应该在C ++中删除自己? 我刚刚在programmers.stackexchange上遇到过这个问题,看到了在成员函数中做一个
delete this;
的问题。 根据我的理解,这通常是禁止的,但是在某些情况下这可能是有用的。什么时候会有用,哪些技术原因没有?     
已邀请:
一般来说,这是一个坏主意,因为当你这样做时,你在技术上是在一个成员函数中,突然之间该类的每个成员都是无效的。显然,如果你在
delete this;
电话后没有接触任何东西,你会没事的。但是很容易忘记这些事情,尝试访问成员变量并获得未定义的行为并花时间在调试器上。 也就是说,它在微软的组件对象模型(COM)中被用于释放组件时(注意,这并不像CashCow指出的那样,仅用于说明目的):
void AddRef() { m_nRefs++; }
void Release()
{
    m_nRefs--;
    if(m_nRefs == 0)
        delete this;
    // class member-variables now deallocated, accessing them is undefined behaviour!
}  // eo Release
也就是说,在C ++中我们有智能指针(例如
boost::shared_ptr
)来管理对象的生命周期。鉴于COM是进程间的,并且可以从VB等语言访问,因此智能指针不是设计团队的选择。     
delete this;
常用于参考计数模式。当对象的引用计数降至零时,该对象将自行删除。如果没有进一步参考被删除的对象,则完全可以。它还要求所述对象驻留在堆/免费存储上。     
我在消息处理中使用它。它是pre shared_ptr,它允许消息决定是删除自身(异步)还是取消阻止发送方(同步)。     

要回复问题请先登录注册