Compartir a través de


CComPtr Class

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

CComPtr::CComPtr

el constructor.

Operadores públicos

Name

Descripción

CComPtr::operator =

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

CComPtrBase

CComPtr

Requisitos

encabezado: atlbase.h

Vea también

Referencia

CComPtr::CComPtr

CComQIPtr::CComQIPtr

Otros recursos

ATL Class Overview