Clase CComPtr
Una clase de puntero inteligente para administrar punteros de interfaz COM.
template<
class T
>
class CComPtr
Parámetros
- T
Una interfaz COM que especifica el tipo de puntero que se va a almacenar.
Members
Constructores públicos
Name |
Descripción |
---|---|
el constructor. |
Operadores públicos
Name |
Descripción |
---|---|
Asigna un puntero al puntero de miembro. |
Comentarios
ATL utiliza CComPtr y CComQIPtr para administrar punteros de interfaz COM.Ambos se derivan de CComPtrBase, y realizan el recuento de referencias automático.
Las clases de CComPtr y de CComQIPtr pueden ayudar a eliminar pérdidas de memoria realizando el recuento de referencias automático.Las siguientes funciones ambas realizan las mismas operaciones lógicas; sin embargo, observe que la segunda versión puede ser menos propenso a errores mediante la clase de CComPtr :
// Error-checking routine that performs manual lifetime management
// of a COM IErrorInfo object
HRESULT CheckComError_Manual()
{
HRESULT hr;
CComBSTR bstrDescription;
CComBSTR bstrSource;
CComBSTR bstrHelpFile;
IErrorInfo* pErrInfo = NULL; // naked COM interface pointer
hr = ::GetErrorInfo(0, &pErrInfo);
if(hr != S_OK)
return hr;
hr = pErrInfo->GetDescription(&bstrDescription);
if(FAILED(hr))
{
pErrInfo->Release(); // must release interface pointer before returning
return hr;
}
hr = pErrInfo->GetSource(&bstrSource);
if(FAILED(hr))
{
pErrInfo->Release(); // must release interface pointer before returning
return hr;
}
hr = pErrInfo->GetHelpFile(&bstrHelpFile);
if(FAILED(hr))
{
pErrInfo->Release(); // must release interface pointer before returning
return hr;
}
pErrInfo->Release(); // must release interface pointer before returning
return S_OK;
}
// Error-checking routine that performs automatic lifetime management
// of a COM IErrorInfo object through a CComPtr smart pointer object
HRESULT CheckComError_SmartPtr()
{
HRESULT hr;
CComBSTR bstrDescription;
CComBSTR bstrSource;
CComBSTR bstrHelpFile;
CComPtr<IErrorInfo> pErrInfo;
hr = ::GetErrorInfo(0, &pErrInfo);
if(hr != S_OK)
return hr;
hr = pErrInfo->GetDescription(&bstrDescription);
if(FAILED(hr))
return hr;
hr = pErrInfo->GetSource(&bstrSource);
if(FAILED(hr))
return hr;
hr = pErrInfo->GetHelpFile(&bstrHelpFile);
if(FAILED(hr))
return hr;
return S_OK;
} // CComPtr will auto-release underlying IErrorInfo interface pointer as needed
En compilaciones de depuración, vínculo atlsd.lib para el seguimiento codificada.
Jerarquía de herencia
CComPtr
Requisitos
encabezado: atlbase.h