newで作った複数種類のリソースを自動deleteしたい

楽しいプログラミング言語は? と聞かれたら迷わずC++をあげたくなるこの頃ですが、ハードウェアが絡むプログラムをC++で組んでいる際に、表題の問題に出くわしました。すなわち、様々なリソースを新規作成(new)したあと、これをほったらかしにしておくとデッドロックが発生したりメモリが溢れるので、いらなくなった時点で消したい(delete)というお話です。C++でうまく組めば、あたらにnewで作成したリソースを手動で制御せずとも、いらなくなった時点(スコープから外れた時点)で自動的にdeleteしてくれるようなコードが組めるのでは、と思いやってみました。


テクニックとして、リファレンスカウンタとデリゲートパターン(has-a関係)、純粋仮想関数を用いたインターフェイスを使っています。has-a関係は継承のis-a関係よりも遥かに使いやすく、僕がコーディングするときにはいろいろなところで活用しています。

なおこのコードですが、小型オートパイロットシステム TinyFeatherのリソース管理で活躍しています。kernel.hkernel.cppには上記のコードをアレンジして入れこんであります。

※普通のPCが対象でしたら、おとなしくboostをインストールしてshared_ptrを使ったほうがいいと思います、とのこと。

May 17, 2011 21:36 fenrir が投稿 : 固定リンク | | このエントリーを含むはてなブックマーク | この記事をdelicious.comでブックマーク

コメント

コメントする