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 CComPtrBase
e 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à
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