Compartir a través de


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

CComPtrBase

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