当将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/

10-11 16:52