当将CComPtr用作类的成员变量时,如何破坏CComPtr?
以下是我编写的一段代码,m_piControl是成员变量CComPtr。
我已经将m_piControl的值分配给了rpControl和进一步使用的rpControl。
HRESULT CSession::GetInterface(OUT CComPtr<IControl>& rpControl )
{
if (m_piConSIControl == NULL)
{
CComPtr<IDispatch> pConDM;
HRESULT hResult = GetMaintenance( &pConDM );
if( FAILED( hResult ) )
return hResult;
CComQIPtr<IMaintenance> pMaintenance( pConDM );
if( !pMaintenance )
return E_NOINTERFACE;
hResult = pMaintenance->GetControl( &m_piControl );
if( FAILED( hResult ) )
return hResult;
}
rpControl = m_piControl;
return S_OK;
}
在分配时,m_piControl引用计数增加。但是没有调用m_piControl的发行版。
我应该明确地称呼它吗?
最佳答案
销毁[member]变量时,将释放m_piControl
的COM接口(interface)指针,而销毁所有者类实例时,将释放m_piControl
的COM接口(interface)指针。这确实是“自动”发生的,并且引用计数已得到适当管理。也就是说,您不需要显式释放m_piControl.Release();
的值。
如果出于某种原因仍要显式释放接口(interface)指针,则可以随时(当然,前提是您遵守COM线程)调用S_OK
。例如,这可能在您在代码段中返回ojit_code之前发生。
关于c++ - 当将CComPtr用作类的成员变量时,如何破坏CComPtr?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29164486/