CComPtr Class
Интеллектуальное класс указателя для управления указатели интерфейса модели COM.
template<
class T
>
class CComPtr
Параметры
- T
Интерфейс модели COM, указывающие тип указателя, которую необходимо сохранить.
Члены
Открытые конструкторы
Имя |
Описание |
---|---|
Конструктор. |
Открытые операторы
Имя |
Описание |
---|---|
Присвоит указатель на указатель члена. |
Заметки
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 для трассировки кода.
Иерархия наследования
CComPtr
Требования
Header: atlbase.h