- 31 名前:デフォルトの名無しさん mailto:sage [2015/11/22(日) 17:32:48.70 ID:vggKhYqJ.net]
- 前スレでも書いたけど、C#のDisposeの問題を紹介しよう
IDisposableなオブジェクトをコンポジションしてメンバに持つと自身もIDisposableにしなければならない だから自分がコンポジションしているオブジェクトがIDisposableかどうか一々調べなければならないし IDisposableなオブジェクトがメンバにあれば、自身もIDisposableにしなければならない さらに、その作ったクラスをコンポジションして使うクラスもIDisposableにする必要があり・・・ という風にIDisposableはクラスで閉じずコンポジションで伝染する というか、むしろ手動で伝染させなければならないという しかもIDisposableの一連のイディオムはとても長くて煩雑 ufcpp.net/study/csharp/rm_disposable.html こういうものを書いて、マネッジドリソースとアンマネッジドリソースで場合わけをしつつ IDisposableなオブジェクトに関しては 手動で自分のメンバのDisposeを漏れなく呼び出すコードを書かなければならない 当たり前だが、どのメンバがIDisposableか完全に把握しておく必要が有る 手動で自分のメンバのDisposeを呼び出す作業は、まるでCのmallocを思い起こさせる 問題点は明確で、DisposeがC++のデストラクタのように芋づる式に勝手に呼ばれない事に有る だから手動で芋づる式に呼び出すコードを書かなくてはならない
|

|