gpt4 book ai didi

c++ - 当 CComPtr 作为类的成员变量时如何销毁它?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:16:57 25 4
gpt4 key购买 nike

当 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 的发布没有被调用。我应该明确地调用它吗?

最佳答案

m_piControl 的 COM 接口(interface)指针的释放将在 [member] 变量被销毁时发生,而这又会随着所有者类实例的销毁而发生。这确实会“自动”发生,并且引用计数得到妥善管理。也就是说,您不需要显式释放 m_piControl 的值。

如果您出于某种原因仍想显式释放接口(interface)指针,您可以随时(当然前提是您遵守 COM 线程)调用 m_piControl.Release();。例如,这可能发生在您在代码片段中返回 S_OK 之前。

关于c++ - 当 CComPtr 作为类的成员变量时如何销毁它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29164486/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com