Partager via


CComPtr, classe

Une classe intelligente de pointeur pour gérer des pointeurs d'interface COM.

template< 
   class T  
> 
class CComPtr

Paramètres

  • T
    Une interface COM qui spécifie le type de pointeur à enregistrer.

Membres

Constructeurs publics

Nom

Description

CComPtr::CComPtr

Constructeur.

Opérateurs publics

Nom

Description

CComPtr::operator =

Assigne un pointeur vers un pointeur de membre.

Notes

ATL utilise CComPtr et CComQIPtr pour gérer des pointeurs d'interface COM. Les deux sont dérivés de CComPtrBase, et elles effectuent un décompte de références automatique.

Les classes de CComPtr et de CComQIPtr peuvent aider à éviter des fuites de mémoire en exécutant le décompte de références automatique. Les fonctions suivantes elles exécutent les mêmes opérations logiques ; toutefois, notez comment la deuxième version peut être moins sujette aux erreurs à l'aide de la 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

Dans les versions debug, lien atlsd.lib pour le traçage de code.

Hiérarchie d'héritage

CComPtrBase

CComPtr

Configuration requise

Header: atlbase.h

Voir aussi

Référence

CComPtr::CComPtr

CComQIPtr::CComQIPtr

Autres ressources

Vue d'ensemble de la classe ATL