La classe CComPtr
Classe de pointeur intelligent pour la gestion des pointeurs d’interface COM.
Syntaxe
template<class T>
class CComPtr
Paramètres
T
Interface COM spécifiant le type de pointeur à stocker.
Membres
Constructeurs publics
Nom | Description |
---|---|
CComPtr::CComPtr |
Constructeur . |
Opérateurs publics
Nom | Description |
---|---|
CComPtr::operator = |
Affecte un pointeur au pointeur membre. |
Notes
ATL utilise CComPtr
et CComQIPtr
gère les pointeurs d’interface COM. Les deux sont dérivés de CComPtrBase
, et les deux effectuent le comptage automatique des références.
Les classes et CComQIPtr
les CComPtr
classes peuvent aider à éliminer les fuites de mémoire en effectuant le comptage automatique des références. Les fonctions suivantes effectuent les mêmes opérations logiques. Toutefois, la deuxième version peut être moins sujette aux erreurs, car elle utilise 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
Dans les builds Debug, liez atlsd.lib pour le suivi du code.
Hiérarchie d'héritage
CComPtr
Spécifications
En-tête : atlbase.h
CComPtr::CComPtr
Constructeur .
CComPtr() throw ();
CComPtr(T* lp) throw ();
CComPtr (const CComPtr<T>& lp) throw ();
Paramètres
lp
Permet d’initialiser le pointeur d’interface.
T
Interface COM.
Notes
Constructeurs qui acceptent un appel AddRef
d’argument, lp
s’il ne s’agit pas d’un pointeur Null. Un objet appartenant à une valeur non null obtient un Release
appel lors de la destruction de l’objet CComPtr, ou si un nouvel objet est affecté à l’objet CComPtr.
CComPtr::operator =
Opérateur d'assignation.
T* operator= (T* lp) throw ();
T* operator= (const CComPtr<T>& lp) throw ();
Valeur de retour
Retourne un pointeur vers l’objet mis à jour CComPtr
Notes
Cette opération AddRefs le nouvel objet et libère l’objet existant, s’il en existe un.
Voir aussi
CComPtr::CComPtr
CComQIPtr::CComQIPtr
Vue d’ensemble de la classe