メモリリーク大発生

作りかけのO2Handlerを実行してみると、メモリリークが大発生した。
基本的にメモリの管理はスマートポインタを使って行なっているが、参照カウント式のスマートポインタの為、以下のような条件でメモリリークしてしまう。

  • 相互参照を行なった。
  • スマートポインタの使い忘れ。
  • 関数の引数内でnewしたポインタをスマートポインタに代入した。(boost::shared_ptrのドキュメントを参照)

ある程度は原因を究明して修正したが、改めてテストを実行するとまたもやリークが大発生。
ちなみに、テストには自作のフレームワークを使っているのだが、1つのプロセス内で全てのテストを実行する為、どのテストでリークが起きたのかわからないのだ。もちろん、一つ一つテストを実行すればわかるが、それは面倒だ。

そこでテストフレームワークを修正し、1つのテストを1つのプロセスで行なうようにする事にした。これならば、あるテストがメモリを破壊し、他のテストに影響を与える事も防げるし、VisualC++のメモリリークチェックを利用し、メモリリークが起きたらテスト失敗と見なす事もできる。