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 an gibt.

Member

Öffentliche Konstruktoren

name BESCHREIBUNG
CComPtr::CComPtr Der Konstruktor.

Öffentliche Operatoren

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

Bemerkungen

ATL verwendet und CComPtr zum CComQIPtr Verwalten von COM-Schnittstellenze0ern. Beide werden von abgeleitet CComPtrBase, und beide verwenden die automatische Verweiszählung.

Die Klassen CComPtr und CComQIPtr können dazu beitragen, Speicherverlusten durch automatische Verweiszählung zu beseitigen. Die folgenden Funktionen verwenden beide die gleichen logischen Vorgänge. Die zweite Version ist jedoch möglicherweise weniger fehleranfällig, da sie die -Klasse CComPtr 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

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.

Bemerkungen

Die Konstruktoren, die einen Argumentaufruf für AddRef verwenden lp, wenn es sich nicht um einen NULL-Zeiger handelt. Ein Objekt, das sich nicht im Besitz von NULL Release befindet, ruft einen Aufruf der Zerstörung 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 Objekt CComPtr zurück.

Bemerkungen

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

Siehe auch

CComPtr::CComPtr
CComQIPtr::CComQIPtr
Klassenübersicht