从例子中我看到了COMIUnknown::Release()
函数的实现是这样的:
ULONG Release()
{
InterlockedDecrement(&m_count);
if(m_count == 0) {
delete this;
}
return m_count;
}
因此,如果 m_count 为 0,那么我们将删除“this”对象,并返回引用计数。
我不明白的是为什么它有效?!?!
删除对象不会破坏调用堆栈,或者可以,因为它由线程持有,所以它与对象无关???
如果对象已经被删除了,我们怎么可能返回m_count呢,它应该已经被删除了。我本可以说服自己,删除后代码返回硬编码的 0 是可以的,但是它怎么能返回成员呢?!?!
非常感谢你的帮助! :-)
该代码是假的。永远不能相信 m_countafter的减量。正确的代码是always像这样:
ULONG Release()
{
ULONG count = InterlockedDecrement(&m_count);
if(count == 0){ delete this; }
return count;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)