【发布时间】:2011-06-19 11:35:33
【问题描述】:
从例子中我看到 COM IUnknown::Release() 函数实现是这样的:
ULONG Release()
{
InterlockedDecrement(&m_count);
if(m_count == 0) {
delete this;
}
return m_count;
}
所以,如果 m_count 为 0,那么我们将删除“this”对象,并返回引用计数。 我不明白为什么它会起作用?!?!
删除对象不会破坏调用堆栈还是可以,因为它被线程持有,所以它与对象无关???
如果对象已被删除,我们怎么可能返回 m_count,它应该已被删除。我本可以说服自己,如果删除后代码返回硬编码的 0 也没关系,但它怎么会返回成员?!?!
非常感谢您的帮助! :-)
【问题讨论】:
-
+1 你是对的 - 要么这是错误代码,要么这里有一些更细微的工作。我很好奇是否有更多 COM 经验的人可以回答这个问题,但我的直觉是,这是完全错误的。