CComPtr Class
Eine Klasse des intelligenten Zeigermechanismus zum Verwalten von COM-Schnittstellenzeigern.
template<
class T
>
class CComPtr
Parameter
- T
Eine COM-Schnittstelle, die den Typ des zu speichernden Zeigers angibt.
Mitglieder
Öffentliche Konstruktoren
Name |
Description |
---|---|
Der -Konstruktor. |
Öffentliche Operatoren
Name |
Description |
---|---|
Weist einen Zeiger auf das Memberzeiger zu. |
Hinweise
ATL verwendet CComPtr und CComQIPtr, um COM-Schnittstellenzeiger zu verwalten. Beide werden von CComPtrBase berechnet, und beide führen automatische Verweiszählung aus.
Die CComPtr und CComQIPtr-Klassen können helfen, Speicherverluste zu beseitigen, indem sie automatische Verweiszählung ausführen. Die folgenden Funktionen beide führen die gleichen logischen Operationen aus; Beachten Sie jedoch, wie die zweite Version möglicherweise weniger fehleranfällig ist, indem 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
In Debugbuilds Link atlsd.lib für Ablaufverfolgung.
Vererbungshierarchie
CComPtr
Anforderungen
Header: atlbase.h