CComPtr-Klasse

Eine intelligente Zeigerklasse zum Verwalten von COM-Schnittstellenzeigern.

Syntax

template<class T>
class CComPtr

Parameter

T
Eine COM-Schnittstelle, die den Typ des zu speichernden Zeigers 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 zum Verwalten von CComQIPtr COM-Schnittstellenzeigern. Beide werden von CComPtrBase abgeleitet, und beide dienen zur automatischen Verweiszählung.

Die CComPtr Klassen und können dazu CComQIPtr beitragen, Speicherverluste zu vermeiden, indem sie eine automatische Verweiszählung durchführen. Mit den folgenden Funktionen werden dieselben logischen Vorgänge durchgeführt. Die zweite Version ist jedoch möglicherweise weniger fehleranfällig, 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 unter Debugbuilds die Datei atlsd.lib für die Codeablaufverfolgung.

Vererbungshierarchie

CComPtrBase

CComPtr

Requirements (Anforderungen)

Header:atlbase.h

CComPtr::CComPtr

Der Konstruktor.

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

Parameter

lp
Wird verwendet, um den Schnittstellenzeiger zu initialisieren.

T
Eine COM-Schnittstelle.

Hinweise

Die Konstruktoren, die ein Argument für AddRef lp verwenden, rufen auf, wenn es sich nicht um einen NULL-Zeiger handelt. Ein Objekt, das nicht NULL ist, ruft einen Release Aufruf der Zerstörung des CComPtr-Objekts ab, oder , wenn dem CComPtr-Objekt ein neues -Objekt zugewiesen wird.

CComPtr::operator =

Zuweisungsoperator.

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

Rückgabewert

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

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