Compartilhar via


Classe de CComPtr

Uma classe inteligente do ponteiro para gerenciar ponteiros da interface COM.

template<
   class T 
>
class CComPtr

Parâmetros

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

Membros

ezzw7k98.collapse_all(pt-br,VS.110).gifConstrutores public

Nome

Descrição

CComPtr::CComPtr

o construtor.

ezzw7k98.collapse_all(pt-br,VS.110).gifOperadores públicos

Nome

Descrição

CComPtr::operator =

Atribui um ponteiro para o ponteiro de membro.

Comentários

Usa CComPtr e CComQIPtr de ATL gerenciar ponteiros da interface COM.Ambos são derivados de CComPtrBase, ambos e executam a contagem de referência automática.

CComPtr E as classes de CComQIPtr podem ajudar a eliminar vazamentos de memória executando a contagem de referência automática.As seguintes funções ambas executam as mesmas operações lógicas; no entanto, observe como a segunda versão pode ser menos sujeita a erros usando a classe 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

Em compilações de depuração, atlsd.lib link para o rastreamento de código.

Hierarquia de herança

CComPtrBase

CComPtr

Requisitos

Cabeçalho: atlbase.h

Consulte também

Referência

CComPtr::CComPtr

CComQIPtr::CComQIPtr

Outros recursos

Visão geral da classe de ATL