Klasa CComPtr
Klasa inteligentne wskaźnik zarządzania wskaźników interfejsów COM.
template<
class T
>
class CComPtr
Parametry
- T
Interfejs COM, określając typ wskaźnika, które mają być przechowywane.
Członkowie
Publiczne konstruktory
Nazwa |
Opis |
---|---|
Konstruktor. |
Podmioty publiczne
Nazwa |
Opis |
---|---|
Przypisuje wskaźnik wskaźnik Członkowskich. |
Uwagi
Używa ATL CComPtr i CComQIPtr do wskaźników interfejsów COM zarządzania.Oba wynikają z CComPtrBase, i wykonać obie odniesienia automatycznego zliczania.
CComPtr i CComQIPtr klasy może pomóc wyeliminować przecieki pamięci, wykonując odniesienia automatycznego zliczania.Następujące funkcje oba wykonywać te same operacje logiczne; należy jednak zauważyć, jak druga wersja może być mniej podatne za pomocą CComPtr klasy:
// 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
W kompilacjach debugowania łącze atlsd.lib do śledzenia kodu.
Hierarchii dziedziczenia
CComPtr
Wymagania
Nagłówek: atlbase.h