Compartilhar via


Classe CComPtr

Uma classe de ponteiro inteligente para gerenciar ponteiros de interface COM.

Sintaxe

template<class T>
class CComPtr

Parâmetros

T
Uma interface COM especificando o tipo de ponteiro a ser armazenado.

Membros

Construtores públicos

Nome Descrição
CComPtr::CComPtr O construtor .

Operadores públicos

Nome Descrição
CComPtr::operator = Atribui um ponteiro ao ponteiro do membro.

Comentários

A ATL usa CComPtr e CComQIPtr para gerenciar ponteiros de interface COM. Ambos são derivados de CComPtrBase e ambos fazem contagem automática de referências.

As classes CComPtr e CComQIPtr podem ajudar a eliminar perda de memória ao executar a contagem automática de referências. As funções a seguir fazem as mesmas operações lógicas. No entanto, a segunda versão pode ser menos propensa a erros, pois usa a classe 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

Em builds de depuração, vincule atlsd.lib para rastreamento de código.

Hierarquia de herança

CComPtrBase

CComPtr

Requisitos

Cabeçalho: atlbase.h

CComPtr::CComPtr

O construtor .

CComPtr() throw ();
CComPtr(T* lp) throw ();
CComPtr (const CComPtr<T>& lp) throw ();

Parâmetros

lp
Usado para inicializar o ponteiro da interface.

T
A interface COM.

Comentários

Os construtores que usarão uma chamada AddRef de argumento em lp, se ela não for um ponteiro nulo. Um objeto próprio não nulo receberá uma chamada Release após a destruição do objeto CComPtr ou se um novo objeto for atribuído ao objeto CComPtr.

CComPtr::operator =

Operador de atribuição.

T* operator= (T* lp) throw ();
T* operator= (const CComPtr<T>& lp) throw ();

Valor de retorno

Retorna um ponteiro para o objeto CComPtr atualizado.

Comentários

Essa operação (AddRefs) adiciona referências ao novo objeto e libera o objeto existente, se houver um.

Confira também

CComPtr::CComPtr
CComQIPtr::CComQIPtr
Visão geral da aula