CComPtr-Klasse

Eine Klasse des intelligenten Zeigermechanismus zum Verwalten von COM-Schnittstellenzeigern.

template<
   class T 
>
class CComPtr

Parameter

  • T
    Eine COM-Schnittstelle, die den Typ des zu speichernden Zeigers angibt.

Mitglieder

ezzw7k98.collapse_all(de-de,VS.110).gifÖffentliche Konstruktoren

Name

Description

CComPtr::CComPtr

Der -Konstruktor.

ezzw7k98.collapse_all(de-de,VS.110).gifÖffentliche Operatoren

Name

Description

CComPtr::operator =

Weist einen Zeiger auf das Memberzeiger zu.

Hinweise

ATL verwendet CComPtr und CComQIPtr, um COM-Schnittstellenzeiger zu verwalten.Beide werden von CComPtrBase berechnet, und beide führen automatische Verweiszählung aus.

Die CComPtr und CComQIPtr-Klassen können helfen, Speicherverluste zu beseitigen, indem sie automatische Verweiszählung ausführen.Die folgenden Funktionen beide führen die gleichen logischen Operationen aus; Beachten Sie jedoch, wie die zweite Version möglicherweise weniger fehleranfällig ist, indem die CComPtr-Klasse verwendet:

// 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 Debugbuilds Link atlsd.lib für Ablaufverfolgung.

Vererbungshierarchie

CComPtrBase

CComPtr

Anforderungen

Header: atlbase.h

Siehe auch

Referenz

CComPtr::CComPtr

CComQIPtr::CComQIPtr

Weitere Ressourcen

ATL-Klassenübersicht