Udostępnij za pośrednictwem


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.

Członkowie

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

CComPtrBase

CComPtr

Wymagania

Nagłówka: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.

Zobacz też

CComPtr::CComPtr
CComQIPtr::CComQIPtr
Omówienie klasy