Partilhar via


CComPtr Classe

Observação

A Active Template Library (ATL) continua a ser suportada. No entanto, já não estamos a adicionar funcionalidades nem a atualizar a documentação.

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

Sintaxe

template<class T>
class CComPtr

Parâmetros

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

Membros

Construtores Públicos

Nome Description
CComPtr::CComPtr O construtor.

Operadores Públicos

Nome Description
CComPtr::operator = Atribui um ponteiro ao ponteiro membro.

Observações

O ATL utiliza CComPtr e CComQIPtr para gerir ponteiros de interface COM. Ambos derivam de CComPtrBase, e ambos fazem contagem automática de referências.

As CComPtr classes and CComQIPtr podem ajudar a eliminar fugas de memória ao realizar contagem automática de referências. As funções seguintes executam as mesmas operações lógicas. No entanto, a segunda versão pode ser menos propensa a erros porque utiliza a CComPtr classe:

// 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 compilações de Depuração, liga atlsd.lib para rastreamento de código.

Hierarquia de herança

CComPtrBase

CComPtr

Requerimentos

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 de interface.

T
Uma interface COM.

Observações

Os construtores que aceitam um argumento chamam AddRef em lp, se não for um ponteiro nulo. Um objeto não detido por null recebe uma Release chamada aquando da 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

Devolve um ponteiro para o objeto atualizado CComPtr

Observações

Esta operação AddRefs o novo objeto e liberta o objeto existente, caso exista.

Consulte também

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