c – “删除这个”是否安全?
作者:互联网
参见英文答案 > Is delete this allowed? 10个
在我最初的基本测试中,这样做是完全安全的.但是,让我感到震惊的是,稍后在删除此操作的函数中尝试操作它可能是运行时错误.这是真的,删除它通常是否安全?或者只有某些安全的情况?
解决方法:
删除这是合法的,并做你期望的事情:它调用你的类的析构函数并释放底层内存.删除后返回,你的this指针值不会改变,所以它现在是一个不应被解除引用的悬空指针.这包括使用类的成员变量进行隐式解除引用.
通常在引用计数类中找到,当ref-count递减为0时,DecrementRefCount()/ Release()/任何成员函数调用都会删除它.
删除这通常被认为是非常糟糕的形式,原因有很多.删除后很容易意外访问成员变量.来电者代码可能无法实现您的对象具有自毁功能.
此外,删除这是一个“代码味道”,您的代码可能没有对象所有权的对称策略(谁分配和谁删除).一个对象不能用new分配自己,所以调用delete意味着类A正在分配一个对象,但是B类稍后将它释放[self].
标签:self-destruction,c,runtime-error 来源: https://codeday.me/bug/20190917/1809995.html