CComPtr
Klasa
Inteligentna klasa wskaźnika do zarządzania wskaźnikami interfejsu COM.
Składnia
template<class T>
class CComPtr
Parametry
T
Interfejs COM określający typ wskaźnika, który ma być przechowywany.
Elementy członkowskie
Konstruktory publiczne
Nazwa/nazwisko | opis |
---|---|
CComPtr::CComPtr |
Konstruktor. |
Operatory publiczne
Nazwa/nazwisko | opis |
---|---|
CComPtr::operator = |
Przypisuje wskaźnik do wskaźnika członkowskiego. |
Uwagi
Usługa ATL używa CComPtr
wskaźników interfejsu COM i CComQIPtr
zarządza nimi. Oba te elementy pochodzą z CComPtrBase
metody , a oba te metody wykonują automatyczne zliczanie odwołań.
Klasy CComPtr
i CComQIPtr
mogą pomóc wyeliminować przecieki pamięci, wykonując automatyczne zliczanie odwołań. Obie te funkcje wykonują te same operacje logiczne. Jednak druga wersja może być mniej podatna na błędy, ponieważ używa 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 obszarze Kompilacje debugowania połącz plik atlsd.lib w celu śledzenia kodu.
Hierarchia dziedziczenia
CComPtr
Wymagania
Nagłówek: atlbase.h
CComPtr::CComPtr
Konstruktor.
CComPtr() throw ();
CComPtr(T* lp) throw ();
CComPtr (const CComPtr<T>& lp) throw ();
Parametry
lp
Służy do inicjowania wskaźnika interfejsu.
T
Interfejs COM.
Uwagi
Konstruktory, które przyjmują wywołanie AddRef
argumentu w metodzie lp
, jeśli nie jest to wskaźnik o wartości null. Obiekt będący własnością Release
inną niż null pobiera wywołanie zniszczenia obiektu CComPtr lub jeśli nowy obiekt jest przypisany do obiektu CComPtr.
CComPtr::operator =
Operator przypisania.
T* operator= (T* lp) throw ();
T* operator= (const CComPtr<T>& lp) throw ();
Wartość zwracana
Zwraca wskaźnik do zaktualizowanego CComPtr
obiektu
Uwagi
Ta operacja Powoduje dodanie nowego obiektu i zwalnia istniejący obiekt, jeśli istnieje.