Classe di CComPtr
Una classe del puntatore intelligente per gestire i puntatori all'interfaccia COM.
template<
class T
>
class CComPtr
Parametri
- T
Un'interfaccia COM che specifica il tipo di puntatore da archiviare.
Membri
Costruttori pubblici
Nome |
Descrizione |
---|---|
Costruttore. |
Operatori pubblici
Nome |
Descrizione |
---|---|
Assegna un puntatore a un puntatore a un membro. |
Note
ATL utilizza CComPtr e CComQIPtr per gestire i puntatori all'interfaccia COM.Entrambi sono derivati da CComPtrBasee entrambi eseguono il conteggio dei riferimenti automatico.
Le classi CComQIPtr e CComPtr possono risolvere le perdite di memoria esegue il conteggio dei riferimenti automatico.Le seguenti funzioni che eseguono le stesse operazioni logiche, tuttavia, nota come la seconda versione può essere meno soggetta a errori utilizzando la classe CComPtr :
// 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
Nelle build di debug, atlsd.lib collegamento per l'analisi del codice.
Gerarchia di ereditarietà
CComPtr
Requisiti
Header: atlbase.h