相关疑难解决方法(0)

为什么COM IUnknown :: Release的实现有效?

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

ULONG Release()
{
    InterlockedDecrement(&m_count);
    if(m_count == 0) {
       delete this;
    }
    return m_count;
}
Run Code Online (Sandbox Code Playgroud)

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

  1. 删除对象不会破坏调用堆栈,也可以,因为它是由线程保存的,所以它与对象无关???

  2. 如果对象已被删除,我们怎么可能返回m_count,它应该被删除.我可以说服自己,如果在删除代码后会返回硬编码0,这是可以的,但是为什么它会返回会员?!?!

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

c++ windows com

6
推荐指数
1
解决办法
2212
查看次数

标签 统计

c++ ×1

com ×1

windows ×1