使用"删除此"符合C++标准的程度如何?

sha*_*oth 3 c++

在对象中实现引用计数时,"release and possible delete object"原语通常如下所示实现:

void CObject::Release()
{
    --referenceCount;
    if( referenceCount == 0 ) {
       delete this;
    }
}
Run Code Online (Sandbox Code Playgroud)

首先,delete this看起来很吓人.但由于成员函数立即返回并且不尝试访问任何成员变量,所以这些东西仍然可以正常工作.至少这是通常解释的方式.成员函数甚至可以调用一些全局函数来写入删除对象的日志.

C++标准是否保证成员函数可以调用delete this然后执行任何不需要访问成员变量和调用成员函数的事情,这将被定义为正常行为?

Alo*_*hal 6

请参阅C++ FAQ.

我没有该标准的副本,但我可以通过谷歌搜索找到的最佳"参考"就是这个.

引用上述内容:

所以现在我想知道C++标准中是否有任何东西可以保证"删除它"; 函数返回时不会崩溃程序.

没有人可以给你这样的保证,因为它可能会崩溃.

不符合标准.标准很清楚,唯一的问题是如果在删除后使用该对象.当一个对象被"使用"时,该标准也非常清楚地表明(在§3.2/ 2中),而当它没有被使用时.