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
CComPtr
Anforderungen
Header: atlbase.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 AddRef
lp
, 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.