Partager via


La classe CComPtr

Classe de pointeur intelligent pour la gestion des pointeurs d’interface COM.

Syntaxe

template<class T>
class CComPtr

Paramètres

T
Interface COM spécifiant le type de pointeur à stocker.

Membres

Constructeurs publics

Nom Description
CComPtr::CComPtr Constructeur .

Opérateurs publics

Nom Description
CComPtr::operator = Affecte un pointeur au pointeur membre.

Notes

ATL utilise CComPtr et CComQIPtr gère les pointeurs d’interface COM. Les deux sont dérivés de CComPtrBase, et les deux effectuent le comptage automatique des références.

Les classes et CComQIPtr les CComPtr classes peuvent aider à éliminer les fuites de mémoire en effectuant le comptage automatique des références. Les fonctions suivantes effectuent les mêmes opérations logiques. Toutefois, la deuxième version peut être moins sujette aux erreurs, car elle utilise la 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

Dans les builds Debug, liez atlsd.lib pour le suivi du code.

Hiérarchie d'héritage

CComPtrBase

CComPtr

Spécifications

En-tête : atlbase.h

CComPtr::CComPtr

Constructeur .

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

Paramètres

lp
Permet d’initialiser le pointeur d’interface.

T
Interface COM.

Notes

Constructeurs qui acceptent un appel AddRef d’argument, lps’il ne s’agit pas d’un pointeur Null. Un objet appartenant à une valeur non null obtient un Release appel lors de la destruction de l’objet CComPtr, ou si un nouvel objet est affecté à l’objet CComPtr.

CComPtr::operator =

Opérateur d'assignation.

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

Valeur de retour

Retourne un pointeur vers l’objet mis à jour CComPtr

Notes

Cette opération AddRefs le nouvel objet et libère l’objet existant, s’il en existe un.

Voir aussi

CComPtr::CComPtr
CComQIPtr::CComQIPtr
Vue d’ensemble de la classe