在对象中实现引用计数时,“释放并可能删除对象”的原语通常是这样实现的:
void CObject::Release()
{
--referenceCount;
if( referenceCount == 0 ) {
delete this;
}
}
首先,
delete this
看起来很可怕。但是由于成员函数立即返回并且不尝试访问任何成员变量,所以这个东西仍然可以正常工作。至少通常是这样解释的。该成员函数甚至可能调用一些全局函数来写入日志,表示它已删除了对象。C++标准是否保证成员函数可以调用
delete this
,然后执行任何不需要访问成员变量和调用成员函数的操作,并且这将被定义为正常行为?
this
进行解引用,无论是隐式还是显式的。 - Pavel Minaev