CComPtr-Klasse

Eine intelligente Zeigerklasse zum Verwalten von COM-Schnittstellenzeigern.

Syntax

template<class T>
class CComPtr

Parameter

T
Eine COM-Schnittstelle, die den zu speichernden Zeigertyp angibt.

Member

Öffentliche Konstruktoren

Name Beschreibung
CComPtr::CComPtr Der Konstruktor.

Öffentliche Operatoren

Name Beschreibung
CComPtr::operator = Weist dem Memberzeiger einen Zeiger zu.

Hinweise

ATL verwendet CComPtr und CComQIPtr verwaltet COM-Schnittstellenzeiger. Beide werden abgeleitet CComPtrBase, und beide führen die automatische Verweiszählung aus.

Mit den CComPtr Klassen CComQIPtr können Speicherverluste beseitigt werden, indem automatische Verweiszählungen ausgeführt werden. Die folgenden Funktionen führen beide die gleichen logischen Vorgänge aus. Die zweite Version kann jedoch weniger fehleranfällig sein, da sie die CComPtr Klasse verwendet:

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

Verknüpfen Sie in Debugbuilds atlsd.lib für die Codeablaufverfolgung.

Vererbungshierarchie

CComPtrBase

CComPtr

Anforderungen

Headeratlbase.h:

CComPtr::CComPtr

Der Konstruktor.

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

Parameter

lp
Wird zum Initialisieren des Schnittstellenzeigers verwendet.

T
Eine COM-Schnittstelle.

Hinweise

Die Konstruktoren, die einen Argumentaufruf ausführen AddReflp, wenn es sich nicht um einen Nullzeiger handelt. Ein Nicht-NULL-Objekt ruft einen Release Aufruf der Vernichtung des CComPtr-Objekts ab, oder wenn dem CComPtr-Objekt ein neues Objekt zugewiesen ist.

CComPtr::operator =

Zuweisungsoperator.

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

Rückgabewert

Gibt einen Zeiger auf das aktualisierte CComPtr Objekt zurück.

Hinweise

Dieser Vorgang fügt das neue Objekt hinzu und gibt das vorhandene Objekt frei, sofern vorhanden.

Siehe auch

CComPtr::CComPtr
CComQIPtr::CComQIPtr
Klassenübersicht