如何将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的发布没有被调用。 我应该明确地打电话吗?
答案 0 :(得分:1)
当[member]变量被销毁时,将发生m_piControl
的COM接口指针,这反过来会破坏所有者类实例。这确实发生了#34;自动&#34;并且正确管理引用计数。也就是说,您不需要明确释放m_piControl
的值。
如果由于某种原因仍然希望明确释放接口指针,您可以随时(假设您遵守COM线程)调用m_piControl.Release();
。例如,在您的代码段中返回S_OK
之前可能会发生这种情况。