Ton*_*ion 8 c++ this delete-operator
我刚刚在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
Run Code Online (Sandbox Code Playgroud)
也就是说,在C++中我们有智能指针(例如boost::shared_ptr)来管理对象的生命周期.鉴于COM是进程间的,并且可以从VB等语言访问,因此智能指针不是设计团队的选择.
delete this;通常用于参考计数模式.当对象的引用计数降至零时,该对象将自行删除.如果没有进一步参考被删除的对象,则完全可以.它还要求所述对象驻留在堆/免费存储上.
| 归档时间: |
|
| 查看次数: |
2940 次 |
| 最近记录: |