CComPtr クラス
更新 : 2007 年 11 月
COM インターフェイス ポインタを管理するためのスマート ポインタ クラスです。
template<
class T
>
class CComPtr
パラメータ
- T
格納されるポインタの種類を指定する COM インターフェイス。
解説
ATL では、CComPtr および CComQIPtr クラス を使って、COM インターフェイス ポインタを管理します。これらのクラスは CComPtrBase クラス から派生し、参照カウントを自動的に実行します。
CComPtr クラスおよび CComQIPtr クラスを使って参照カウントを自動的に実行することにより、メモリ リークを防ぐことができます。次の関数はどちらも同じ論理演算を実行するものですが、2 つ目の関数では、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 とリンクします。
必要条件
ヘッダー : atlbase.h