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