2017年5月12日金曜日

_bstr_tでメモリ解放漏れ

ある日の俺は、ATL で COM作っていた。
クラスのメンバー変数のように_bstr_tを使っていたのだが、
クラスが消えるときに_bstr_tの内部の値が消えてくれなかった。

何でかというと_bstr_tはクラスであって、
オペレータのイコールをオーバーロードしてあって、
内部変数 Data_t に new して値をメモリに確保して入れてる。

それが、デストラクタで消えるかと思ったら、消してないんだよね・・・
なんでnewしてんだ・・・

COMで使う時は、ComBSTRのがいいのかもしんない。

ちなみに消すためには、
_bstr_tのAssign(NULL)を呼び出す。
そのまま放っておくとメモリー解放漏れになる。

誰だ_bstr_tが安全ぽいとか書いた奴!

あー、ここでも同じことで悩んでるやつ発見
http://stackoverflow.com/questions/13011179/bstr-t-memory-leak
日本では鵜呑みにする奴が多いが、MSのコードはバグが多いぞ
よく注意するべし!

0 件のコメント: