ファイナライザのご利用は計画的に
うぇね的には実は現在のファイナライザの仕様にすっごく不満です。
特にECMA-372でこんな文章を見つけて、むっちゃ腹を立てています。
「デストラクタはファイナライザを呼び出すべきです」
じゃ、そういう仕様にしようよ!
確かに、この文章が出てくる理由はわかるんです。
ファイナライザは CLI のディスポーズ・パターンを使っており、その実行はオブジェクトの GC の後になります。このとき、そのファイナライザが所属するインスタンスのマネージド・オブジェクトはすでに回収済みかもしれないので、ファイナライザではネイティブなリソース以外のアクセスは厳禁です。this ですら危険なわけで、正直、ファイナライザでのマネージド・リソースへのアクセスはコンパイル・エラーにするべきだとすら思っています。
だから、ファイナライザはネイティブ・リソース専用。
同じコードを何度も記述するのは無意味だから、デストラクタからもプログラマがファイナライザを呼んどけ、というのはわかるんです。
だったら、デストラクタの後に絶対、ファイナライザが動くって仕様にしましょうよ。
デストラクタが呼ばれた場合、その後にファイナライザが動いてくれるなら、役割分担を意識して記述できるわけで、解放していなくても安心して CLI に後を任せることができるんだから。
あ、ちなみに、これは積極的にファイナライザを使おうといってるわけではないです。
むしろ、現状、ファイナライザ、使うな。と、ぐらいに思ってます。
C++ なんだから、ちゃんとリソースは自分で解放しようね。