CComPtr, classe
Une classe intelligente de pointeur pour gérer des pointeurs d'interface COM.
template<
class T
>
class CComPtr
Paramètres
- T
Une interface COM qui spécifie le type de pointeur à enregistrer.
Membres
Constructeurs publics
Nom |
Description |
---|---|
Constructeur. |
Opérateurs publics
Nom |
Description |
---|---|
Assigne un pointeur vers un pointeur de membre. |
Notes
ATL utilise CComPtr et CComQIPtr pour gérer des pointeurs d'interface COM. Les deux sont dérivés de CComPtrBase, et elles effectuent un décompte de références automatique.
Les classes de CComPtr et de CComQIPtr peuvent aider à éviter des fuites de mémoire en exécutant le décompte de références automatique. Les fonctions suivantes elles exécutent les mêmes opérations logiques ; toutefois, notez comment la deuxième version peut être moins sujette aux erreurs à l'aide de la classe de 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
Dans les versions debug, lien atlsd.lib pour le traçage de code.
Hiérarchie d'héritage
CComPtr
Configuration requise
Header: atlbase.h