CComPtr选件类
托管COM接口指针的智能指针选件类。
template<
class T
>
class CComPtr
参数
- T
指定指针类型的COM接口将存储。
成员
公共构造函数
名称 |
描述 |
---|---|
构造函数。 |
公共运算符
名称 |
描述 |
---|---|
分配指向成员的指针。 |
备注
ATL使用 CComPtr 和 CComQIPtr 管理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