在对象中实现引用计数时,“释放并可能删除对象”原语通常是这样实现的:
void CObject::Release()
{
--referenceCount;
if( referenceCount == 0 ) {
delete this;
}
}
首先,delete this
看起来很吓人。但由于成员函数立即返回并且不尝试访问任何成员变量,所以这些东西仍然可以正常工作。至少通常是这样解释的。成员函数甚至可能调用某个全局函数来写入删除对象的日志。
C++标准是否保证成员函数可以调用delete this
然后做任何不需要访问成员变量和调用成员函数的事情,这将被定义为正常行为?
See C++ FAQ.
我没有该标准的副本,但我可以通过谷歌搜索找到的最佳“参考”是this.
引用上面的话:
所以现在我想知道C++标准中是否有什么
这保证了“删除这个;”不会使程序崩溃
当函数返回时。
没有人能给你这样的保证,因为它可能会崩溃。
不按照标准。标准很明确
唯一的问题是该对象是否在删除后被使用。还有
标准还非常清楚地说明了(在§3.2/2中)当一个对象
是否“已使用”,以及何时未“使用”。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)