Sdílet prostřednictvím


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 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

CComPtrBase

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.

Viz také

CComPtr::CComPtr
CComQIPtr::CComQIPtr
Přehled třídy