Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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 CComPtrBasea 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 lpargumentu , 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.