CComPtr
-Klasse
Eine intelligente Zeigerklasse zum Verwalten von COM-Schnittstellenzeigern.
template<class T>
class CComPtr
T
Eine COM-Schnittstelle, die den zu speichernden Zeigertyp angibt.
Name | Beschreibung |
---|---|
CComPtr::CComPtr |
Der Konstruktor. |
Name | Beschreibung |
---|---|
CComPtr::operator = |
Weist dem Memberzeiger einen Zeiger zu. |
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.
CComPtr
Header: atlbase.h
Der Konstruktor.
CComPtr() throw ();
CComPtr(T* lp) throw ();
CComPtr (const CComPtr<T>& lp) throw ();
lp
Wird zum Initialisieren des Schnittstellenzeigers verwendet.
T
Eine COM-Schnittstelle.
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.
Zuweisungsoperator.
T* operator= (T* lp) throw ();
T* operator= (const CComPtr<T>& lp) throw ();
Gibt einen Zeiger auf das aktualisierte CComPtr
Objekt zurück.
Dieser Vorgang fügt das neue Objekt hinzu und gibt das vorhandene Objekt frei, sofern vorhanden.