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 = Assigne un pointeur au pointeur membre.

Remarques

ATL utilise CComPtr et CComQIPtr pour gérer les pointeurs d’interface com. Les deux sont dérivées de CComPtrBase , et les deux effectuent le décompte de références automatique.

Les CComPtr CComQIPtr classes et peuvent aider à éliminer les fuites de mémoire en effectuant un décompte de références automatique. 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 versions Debug, liez atlsd. lib pour le traçage de code.

Hiérarchie d'héritage

CComPtrBase

CComPtr

Configuration requise

En-tête :atlbase.h

CComPtr::CComPtr

Constructeur.

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

Paramètres

lp
Utilisé pour initialiser le pointeur d’interface.

T
Interface COM.

Remarques

Constructeurs qui prennent un appel AddRef d’argument sur lp , s’il ne s’agit pas d’un pointeur null. Un objet détenu par une valeur non null obtient un Release appel sur la destruction de l’objet CComPtr, ou si un nouvel objet est assigné à l’objet CComPtr.

CComPtr::operator =

Opérateur d'assignation.

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

Valeur renvoyée

Retourne un pointeur vers l’objet mis à jour. CComPtr

Remarques

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 des classes