newで作った複数種類のリソースを自動deleteしたい
楽しいプログラミング言語は? と聞かれたら迷わずC++をあげたくなるこの頃ですが、ハードウェアが絡むプログラムをC++で組んでいる際に、表題の問題に出くわしました。すなわち、様々なリソースを新規作成(new)したあと、これをほったらかしにしておくとデッドロックが発生したりメモリが溢れるので、いらなくなった時点で消したい(delete)というお話です。C++でうまく組めば、あたらにnewで作成したリソースを手動で制御せずとも、いらなくなった時点(スコープから外れた時点)で自動的にdeleteしてくれるようなコードが組めるのでは、と思いやってみました。
テクニックとして、リファレンスカウンタとデリゲートパターン(has-a関係)、純粋仮想関数を用いたインターフェイスを使っています。has-a関係は継承のis-a関係よりも遥かに使いやすく、僕がコーディングするときにはいろいろなところで活用しています。
なおこのコードですが、小型オートパイロットシステム TinyFeatherのリソース管理で活躍しています。kernel.hとkernel.cppには上記のコードをアレンジして入れこんであります。
※普通のPCが対象でしたら、おとなしくboostをインストールしてshared_ptrを使ったほうがいいと思います、とのこと。
コメント
コメントする
- 匿名でのコメントは受け付けておりません。
- お名前(ハンドル名可)とメールアドレスは必ず入力してください。
- メールアドレスを表示されたくないときはURLも必ず記入してください。
- コメント欄でHTMLタグは使用できません。
- コメント本文に日本語(全角文字)がある程度多く含まれている必要があります。
- コメント欄内のURLと思われる文字列は自動的にリンクに変換されます。
- 投稿ボタンを押してエラーがでなければ、投稿は成功しています。反映されるまでには少し時間がかかります。