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


Класс CComPtr

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

Синтаксис

template<class T>
class CComPtr

Параметры

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

Участники

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

Имя Описание
CComPtr::CComPtr Конструктор.

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

Имя Описание
CComPtr::operator = Присваивает указатель указателю элемента.

Замечания

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

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

Требования

Заголовок: atlbase.h

CComPtr::CComPtr

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

CComPtr() throw ();
CComPtr(T* lp) throw ();
CComPtr (const CComPtr<T>& lp) throw ();

Параметры

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

T
COM-интерфейс.

Замечания

Конструкторы, которые вызывают аргумент AddRef lp, если это не пустой указатель. Объект, не принадлежащий null, получает Release вызов при уничтожении объекта CComPtr или если новый объект назначается объекту CComPtr.

CComPtr::operator =

Оператор присвоения.

T* operator= (T* lp) throw ();
T* operator= (const CComPtr<T>& lp) throw ();

Возвращаемое значение

Возвращает указатель на обновленный CComPtr объект

Замечания

Эта операция AddRefs нового объекта и освобождает существующий объект, если он существует.

См. также

CComPtr::CComPtr
CComQIPtr::CComQIPtr
Общие сведения о классе