CComPtr
Třída
Třída inteligentního ukazatele pro správu ukazatelů rozhraní MODELU COM.
Syntaxe
template<class T>
class CComPtr
Parametry
T
Rozhraní COM určující typ ukazatele, který se má uložit.
Členové
Veřejné konstruktory
Název | Popis |
---|---|
CComPtr::CComPtr |
Konstruktor |
Veřejné operátory
Název | Popis |
---|---|
CComPtr::operator = |
Přiřadí ukazatel k členskému ukazateli. |
Poznámky
ATL používá CComPtr
a CComQIPtr
spravuje ukazatele rozhraní MODELU COM. Oba jsou odvozeny od CComPtrBase
a oba provádějí automatické počítání odkazů.
CComQIPtr
Třídy CComPtr
mohou pomoci eliminovat nevracení paměti provedením automatického počítání odkazů. Následující funkce dělají stejné logické operace. Druhá verze však může být méně náchylná k chybám, protože používá CComPtr
třídu:
// 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
V buildech Ladění vytvořte odkaz atlsd.lib pro trasování kódu.
Hierarchie dědičnosti
CComPtr
Požadavky
Záhlaví: atlbase.h
CComPtr::CComPtr
Konstruktor
CComPtr() throw ();
CComPtr(T* lp) throw ();
CComPtr (const CComPtr<T>& lp) throw ();
Parametry
lp
Slouží k inicializaci ukazatele rozhraní.
T
Rozhraní MODELU COM.
Poznámky
Konstruktory, které přebírají volání AddRef
lp
argumentu , pokud to není nulový ukazatel. Objekt, který nevlastní hodnotu null, získá Release
volání při zničení objektu CComPtr, nebo pokud je nový objekt přiřazen k objektu CComPtr.
CComPtr::operator =
Operátor přiřazení.
T* operator= (T* lp) throw ();
T* operator= (const CComPtr<T>& lp) throw ();
Návratová hodnota
Vrátí ukazatel na aktualizovaný CComPtr
objekt.
Poznámky
Tato operace AddRefs nový objekt a uvolní existující objekt, pokud existuje.