何回か、.NET Framework が産み出した鬼子、「IDisposable」について取り上げてみたいと思う。
まったく厄介なインターフェイスである…。
第1回は「前提編」。今後の連載を進める上での下地を定義する。
なお、ここで登場する用語は、本連載のために便宜的に定義するものであり、一般的に通用するものではないことに注意されたい。
IDisposableは、ガベージコレクタが面倒を見てくれない「アンマネージリソース」を解放するためのインターフェイスである。
IDisposableを実装しているオブジェクトを「Disposableオブジェクト」と呼ぶことにしよう。
だが、Disposableオブジェクトがすべて、アンマネージリソースを保持しているとは限らない。
以下では、Disposableオブジェクトを3つに分類する。
- 1:直接型
- アンマネージリソースへのポインタやハンドルを、メンバに直接保持しているオブジェクト。
- 2:間接型
- 自身では直接アンマネージリソースを保持していないが、他のDisposableオブジェクトをメンバに持っているオブジェクト。
自身では直接アンマネージリソースを保持していないが、他のDisposableオブジェクトから派生しているものもこれにあたる。
- 3:複合型
- ポインタやハンドルも、他のDisposableオブジェクトも持っているオブジェクト。
囚人さんのblogでも何度か取り上げられているが、ここでも、Disposableオブジェクトの「所有者」という概念を意識してみよう。所有者とは、そのオブジェクトをDisposeする責任を持つオブジェクトのことだ。
次回は「『Disposableパターン』と『当たり前のこと』」、第3回は「例外安全性」をとり上げてみたい。