Share via


CComPtr-klasse

Opmerking

De ATL (Active Template Library) wordt nog steeds ondersteund. We voegen echter geen functies meer toe of werken de documentatie bij.

Een slimme aanwijzerklasse voor het beheren van COM-interfacepointers.

Syntaxis

template<class T>
class CComPtr

Parameterwaarden

T
Een COM-interface waarmee het type aanwijzer wordt opgegeven dat moet worden opgeslagen.

Leden

Openbare constructors

Naam Description
CComPtr::CComPtr De constructor.

Openbare operators

Naam Description
CComPtr::operator = Wijst een aanwijzer toe aan de lidpointer.

Opmerkingen

ATL gebruikt CComPtr en CComQIPtr beheert COM-interfacepointers. Beide zijn afgeleid van CComPtrBase, en beide doen automatische verwijzing tellen.

De CComPtr en CComQIPtr klassen kunnen helpen geheugenlekken te elimineren door het automatisch tellen van verwijzingen uit te voeren. De volgende functies voeren beide dezelfde logische bewerkingen uit. De tweede versie kan echter minder foutgevoelig zijn omdat deze gebruikmaakt van de CComPtr klasse:

// 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

In Builds voor foutopsporing koppelt u atlsd.lib voor codetracering.

Overnamehiƫrarchie

CComPtrBase

CComPtr

Requirements

Rubriek:atlbase.h

CComPtr::CComPtr

De constructor.

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

Parameterwaarden

lp
Wordt gebruikt om de interfacepointer te initialiseren.

T
Een COM-interface.

Opmerkingen

De constructors die een argumentaanroep AddReflpuitvoeren, als dit geen null-aanwijzer is. Een niet-null-eigendomsobject krijgt een Release aanroep van de vernietiging van het CComPtr-object of als een nieuw object is toegewezen aan het CComPtr-object.

CComPtr::operator =

Toewijzingsoperator.

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

Retourwaarde

Retourneert een aanwijzer naar het bijgewerkte CComPtr object

Opmerkingen

Met deze bewerking voegt u het nieuwe object toe en wordt het bestaande object vrijgegeven, indien aanwezig.

Zie ook

CComPtr::CComPtr
CComQIPtr::CComQIPtr
Overzicht van klassen