BSTR型⇒_bstr_t型へ型変換
前回BSTR型を調べてリンク集がありますので前提知識としてどぞ
知識のゴミ箱:BSTR型[http://mzs184.blogspot.com/2008/03/bstr.html]
BSTR型を_bstr_t型へ型変換について。
_bstr_tはBSTRのスマートポインタですね。
BSTRはそのまま使うとメモリリークが怖いので一度_bstr_tに型変換して使った方が良いですね。
// OK
{
BSTR testBSTR;
// BSTR型のメモリ確保と解放
testBSTR = ::SysAllocString(L"testBstr");
::SysFreeString(testBSTR);
}
// OK
{
BSTR testBSTR;
testBSTR = ::SysAllocString(L"testBstr");
// 第二引数がfalseなのでtestBSTRをコピーせずに_bstr_t内部で保持
_bstr_t testBstrT(testBSTR, false);
// スコープ抜ける際に_bstr_tのデストラクタでtestBSTRを解放
}
// OK
{
BSTR testBSTR;
testBSTR = ::SysAllocString(L"testBstr");
// 第二引数がtrueなのでtestBSTRをコピーして_bstr_t内部で保持
_bstr_t testBstrT(testBSTR, true);
// testBSTRを解放
::SysFreeString(testBSTR);
// スコープ抜ける際に_bstr_tのデストラクタでコピーしたtestBSTRを解放
}
// NG
{
BSTR testBSTR;
testBSTR = ::SysAllocString(L"testBstr");
// testBSTRをコピーして_bstr_t内部で保持
_bstr_t testBstrT(testBSTR); // コンストラクタで引数をコピーして保持する
// スコープ抜ける際に_bstr_tのデストラクタでコピーしたtestBSTRを解放
// ※testBSTR自身が解放されない。
}
.