Megosztás a következőn keresztül:


CComPtr osztály

Megjegyzés:

Az aktív sablontár (ATL) továbbra is támogatott. A továbbiakban azonban nem adunk hozzá funkciókat, és nem frissítjük a dokumentációt.

Intelligens mutatóosztály a COM-felület mutatóinak kezeléséhez.

Szemantika

template<class T>
class CComPtr

Paraméterek

T
A tárolandó mutató típusát meghatározó COM-felület.

Tagok

Nyilvános konstruktorok

Név Description
CComPtr::CComPtr A konstruktor.

Nyilvános operátorok

Név Description
CComPtr::operator = Egy mutatót rendel a tagmutatóhoz.

Megjegyzések

Az ATL a COM-felület mutatóit használja CComPtr és CComQIPtr kezeli. Mindkettő származik, CComPtrBaseés mindkettő automatikus hivatkozásszámlálást végez.

Az CComPtr osztályok automatikus CComQIPtr hivatkozásszámlálással kiküszöbölhetik a memóriavesztést. Az alábbi függvények mindkettő ugyanazt a logikai műveletet hajtják végre. A második verzió azonban kevésbé lehet hibalehetőség, mert az osztályt CComPtr használja:

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

A hibakeresési buildekben az atlsd.lib csatolása a kódkövetéshez.

Öröklési hierarchia

CComPtrBase

CComPtr

Requirements

Fejléc:atlbase.h

CComPtr::CComPtr

A konstruktor.

CComPtr() throw ();
CComPtr(T* lp) throw ();
CComPtr (const CComPtr<T>& lp) throw ();

Paraméterek

lp
A felületmutató inicializálására szolgál.

T
COM-felület.

Megjegyzések

Az argumentumhívást AddReflpkezdeményező konstruktorok, ha nem nullmutató. A nem null értékű objektumok meghívást Release kapnak a CComPtr objektum megsemmisítésére, vagy ha egy új objektum van hozzárendelve a CComPtr objektumhoz.

CComPtr::operator =

Hozzárendelés-operátor.

T* operator= (T* lp) throw ();
T* operator= (const CComPtr<T>& lp) throw ();

Visszaadott érték

Mutatót ad vissza a frissített CComPtr objektumhoz

Megjegyzések

Ez a művelet hozzáadja az új objektumot, és felszabadítja a meglévő objektumot, ha van ilyen.

Lásd még

CComPtr::CComPtr
CComQIPtr::CComQIPtr
osztály áttekintése