CComPtr Class
處理的 COM 介面指標的智慧型指標類別。
template<
class T
>
class CComPtr
參數
- T
指定指標型別 COM 介面的值。
Members
公用建構函式
名稱 |
描述 |
---|---|
建構函式。 |
公用運算子
名稱 |
描述 |
---|---|
將成員指標的指標。 |
備註
ATL 會 CComPtr 和 CComQIPtr 處理 COM 介面指標。 兩個從衍生的型別, CComPtrBase,而且同時執行自動參考計數。
CComPtr 和 CComQIPtr 類別可以藉由執行自動參考計數減少記憶體遺漏 (Memory Leak)。 下列兩個函式執行相同的邏輯作業,但是請注意,第二個版本可能會如何比較不容易出錯的使用 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