Condividi tramite


Classe CComPtr

Classe puntatore intelligente per la gestione dei puntatori di interfaccia COM.

Sintassi

template<class T>
class CComPtr

Parametri

T
Interfaccia COM che specifica il tipo di puntatore da archiviare.

Membri

Costruttori pubblici

Nome Descrizione
CComPtr::CComPtr Costruttore.

Operatori pubblici

Nome Descrizione
CComPtr::operator = Assegna un puntatore al puntatore del membro.

Osservazioni:

ATL usa e CComQIPtr per gestire i puntatori CComPtr di interfaccia COM. Entrambi sono derivati da CComPtrBasee entrambi eseguono il conteggio automatico dei riferimenti.

Le CComPtr classi e CComQIPtr consentono di eliminare le perdite di memoria eseguendo il conteggio automatico dei riferimenti. Le funzioni seguenti eseguono entrambe le stesse operazioni logiche. Tuttavia, la seconda versione può essere meno soggetta a errori perché usa la CComPtr classe :

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

In Compilazioni di debug collegare atlsd.lib per la traccia del codice.

Gerarchia di ereditarietà

CComPtrBase

CComPtr

Requisiti

Intestazione: atlbase.h

CComPtr::CComPtr

Costruttore.

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

Parametri

lp
Utilizzato per inizializzare il puntatore dell'interfaccia.

T
Interfaccia COM.

Osservazioni:

Costruttori che accettano una chiamata AddRef di argomento su lp, se non è un puntatore Null. Un oggetto di proprietà non Null ottiene una Release chiamata alla distruzione dell'oggetto CComPtr o se un nuovo oggetto viene assegnato all'oggetto CComPtr.

CComPtr::operator =

Operatore di assegnazione.

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

Valore restituito

Restituisce un puntatore all'oggetto aggiornato CComPtr

Osservazioni:

Questa operazione AddRefs il nuovo oggetto e rilascia l'oggetto esistente, se presente.

Vedi anche

CComPtr::CComPtr
CComQIPtr::CComQIPtr
Cenni preliminari sulla classe