May 17, 2011

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

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


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

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

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

21:36 fenrir が投稿 : 固定リンク | | このエントリーを含むはてなブックマーク | この記事をdel.icio.usでブックマーク | トラックバック
このエントリーのトラックバックURL: http://fenrir.naruoka.org/mt/mt-tb.cgi/801
コメント
コメントする









名前、アドレスを登録しますか?
(次回以降コメント入力が楽になります)
  • 匿名でのコメントは受け付けておりません。
  • 名前(ハンドル名可)とメールアドレスは必ず入力してください。
  • メールアドレスを表示されたくないときはURLも必ず記入してください。
  • コメント欄でHTMLタグは使用できません。
  • コメント本文に日本語(全角文字)がある程度多く含まれている必要があります。
  • コメント欄内のURLと思われる文字列は自動的にリンクに変換されます。