线程中使用的CComQIPtr参考计数问题

问题描述

我有一个程序,它通过局部ComQIPtr线程来集中使用成员变量ComQIPtr,例如(非常简单):

class dummy
{
public:
 (some code)

    void calledFromThreads ()
    {
        if (m_memberVar.getType()==1)
        {
            CComQIPtr<type2> localVar(m_memberVar);
            (more code)
        }
    }

private:
    CComQIPtr<type1> m_memberVar;

}; 

大量使用后,有时在if (m_memberVar.getType()==1)行中,会引发异常。

调试之后,我看到指针指示 0xdddddd (已删除的内存),在再次执行后,将内存断点放在m_memberVar内存位置,我看到该指针已释放离开if (m_memberVar.getType()==1)块时,销毁CComQIPtr<type2> localVar(m_memberVar)时。

恕我直言,这在理论上永远不会发生,因为创建CComQIPtr时,它已经在内部制作了AddRef,因此,Release CComQIPtr被销毁不应该影响它(它是+1,然后是-1),即使同时访问同一功能有多个,在相减之前总会有一个加法。

但是事实是它(偶尔地并且随机地)在代码的某些部分(在许多部分中使用CComQIPtr)发生了,我不明白为什么。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)