Класс 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 для трассировки кода.
Иерархия наследования
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
Общие сведения о классе