Класс 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-интерфейс.

Замечания

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

CComPtr::operator =

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

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

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

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

Замечания

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

См. также

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