Поделиться через


CComPtr Class

Интеллектуальное класс указателя для управления указатели интерфейса модели COM.

template< 
   class T  
> 
class CComPtr

Параметры

  • T
    Интерфейс модели COM, указывающие тип указателя, которую необходимо сохранить.

Члены

Открытые конструкторы

Имя

Описание

CComPtr::CComPtr

Конструктор.

Открытые операторы

Имя

Описание

CComPtr::operator =

Присвоит указатель на указатель члена.

Заметки

CComPtr и CComQIPtr использования библиотеки ATL управлять указатели интерфейса модели COM. Оба являются производными от CComPtrBase, и оба выполняют автоматическую подсчет ссылок.

CComPtr И классы CComQIPtr могут помочь исключить утечки памяти с помощью автоматического подсчета ссылок. Следующие функции оба выполняют одни и те же логической операции; однако обратите внимание, что вторая версия может быть менее подвержена ошибкам с помощью класса 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

В построениях отладки, связь atlsd.lib для трассировки кода.

Иерархия наследования

CComPtrBase

CComPtr

Требования

Header: atlbase.h

См. также

Ссылки

CComPtr::CComPtr

CComQIPtr::CComQIPtr

Другие ресурсы

ATL Class Overview