Clase CComPtr
Una clase de puntero inteligente para administrar punteros de interfaz COM.
Sintaxis
template<class T>
class CComPtr
Parámetros
T
Una interfaz COM que especifica el tipo de puntero que se va a almacenar.
Miembros
Constructores públicos
Nombre | Descripción |
---|---|
CComPtr::CComPtr |
Constructor . |
Operadores públicos
Nombre | Descripción |
---|---|
CComPtr::operator = |
Asigna un puntero dirigido al puntero de miembro. |
Comentarios
ATL usa CComPtr
y CComQIPtr
para administrar punteros de interfaz COM. Ambos se derivan de CComPtrBase
, y ambos realizan un recuento de referencias automático.
Las clases CComPtr
y CComQIPtr
pueden ayudar a eliminar las pérdidas de memoria mediante el recuento de referencias automático. Las siguientes funciones realizan las mismas operaciones lógicas. Sin embargo, la segunda versión puede ser menos propensa a errores porque utiliza la clase 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, vincule atlsd.lib para el seguimiento de código.
Jerarquía de herencia
CComPtr
Requisitos
Encabezado: atlbase.h
CComPtr::CComPtr
Constructor .
CComPtr() throw ();
CComPtr(T* lp) throw ();
CComPtr (const CComPtr<T>& lp) throw ();
Parámetros
lp
Se usa para inicializar el puntero de interfaz.
T
Una interfaz COM.
Comentarios
Los constructores que toman una llamada de argumento AddRef
en lp
, si no es un puntero nulo. Un objeto en propiedad que no es null obtiene una llamada de Release
tras la destrucción del objeto CComPtr, o si se asigna un nuevo objeto al objeto CComPtr.
CComPtr::operator =
Operador de asignación.
T* operator= (T* lp) throw ();
T* operator= (const CComPtr<T>& lp) throw ();
Valor devuelto
Devuelve un puntero al objeto actualizado CComPtr
Comentarios
Esta operación AddRefs el nuevo objeto y libera el objeto existente, si es que hay alguno.
Consulte también
CComPtr::CComPtr
CComQIPtr::CComQIPtr
Información general sobre la clase