gpt4 book ai didi

c++ - 为什么这个 COM IUnknown::Release 的实现有效?

转载 作者:可可西里 更新时间:2023-11-01 13:17:00 27 4
gpt4 key购买 nike

从例子中我看到 COM IUnknown::Release() 函数实现是这样的:

ULONG Release()
{
InterlockedDecrement(&m_count);
if(m_count == 0) {
delete this;
}
return m_count;
}

因此,如果 m_count 为 0,那么我们将删除“this”对象,并返回引用计数。我不明白的是为什么它有效?!?!

  1. 删除对象不会破坏调用堆栈,或者因为它被线程占用,所以它与对象无关吗???

  2. 如果对象被删除了,怎么可能返回m_count,应该是被删除了。我本可以说服自己,如果删除后代码返回硬编码 0 没关系,但它怎么会返回成员?!?!

非常感谢您的帮助! :-)

最佳答案

该代码是伪造的。人们永远不能相信 m_count after 递减。正确的代码总是是这样的:

ULONG Release()
{
ULONG count = InterlockedDecrement(&m_count);
if(count == 0){ delete this; }
return count;
}

关于c++ - 为什么这个 COM IUnknown::Release 的实现有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4866456/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com