Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of mappen te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen om mappen te wijzigen.
Opmerking
De ATL (Active Template Library) wordt nog steeds ondersteund. We voegen echter geen functies meer toe of werken de documentatie bij.
Een slimme aanwijzerklasse voor het beheren van COM-interfacepointers.
Syntaxis
template<class T>
class CComPtr
Parameterwaarden
T
Een COM-interface waarmee het type aanwijzer wordt opgegeven dat moet worden opgeslagen.
Leden
Openbare constructors
| Naam | Description |
|---|---|
CComPtr::CComPtr |
De constructor. |
Openbare operators
| Naam | Description |
|---|---|
CComPtr::operator = |
Wijst een aanwijzer toe aan de lidpointer. |
Opmerkingen
ATL gebruikt CComPtr en CComQIPtr beheert COM-interfacepointers. Beide zijn afgeleid van CComPtrBase, en beide doen automatische verwijzing tellen.
De CComPtr en CComQIPtr klassen kunnen helpen geheugenlekken te elimineren door het automatisch tellen van verwijzingen uit te voeren. De volgende functies voeren beide dezelfde logische bewerkingen uit. De tweede versie kan echter minder foutgevoelig zijn omdat deze gebruikmaakt van de CComPtr klasse:
// 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 Builds voor foutopsporing koppelt u atlsd.lib voor codetracering.
Overnamehiƫrarchie
CComPtr
Requirements
Rubriek:atlbase.h
CComPtr::CComPtr
De constructor.
CComPtr() throw ();
CComPtr(T* lp) throw ();
CComPtr (const CComPtr<T>& lp) throw ();
Parameterwaarden
lp
Wordt gebruikt om de interfacepointer te initialiseren.
T
Een COM-interface.
Opmerkingen
De constructors die een argumentaanroep AddReflpuitvoeren, als dit geen null-aanwijzer is. Een niet-null-eigendomsobject krijgt een Release aanroep van de vernietiging van het CComPtr-object of als een nieuw object is toegewezen aan het CComPtr-object.
CComPtr::operator =
Toewijzingsoperator.
T* operator= (T* lp) throw ();
T* operator= (const CComPtr<T>& lp) throw ();
Retourwaarde
Retourneert een aanwijzer naar het bijgewerkte CComPtr object
Opmerkingen
Met deze bewerking voegt u het nieuwe object toe en wordt het bestaande object vrijgegeven, indien aanwezig.