问题描述
我有一个程序,它通过局部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 (将#修改为@)