最近、オブジェクトが破棄されないというトリッキーなバグを調査していました。
コードでいくつかのパターンを見つけました。一部の m_foo が破棄されていないことが報告されていますが、SomeClass のすべてのインスタンスが破棄されているようです。
public class SomeClass: IDisposable
{
void Dispose()
{
if (m_foo != null)
{
m_foo.Dispose();
}
if (m_bar != null)
{
m_bar.Dispose();
}
}
private Foo m_foo;
private Bar m_bar;
}
Foo.Dispose が例外をスローする可能性があるため、次のコードが実行されないため、m_bar が破棄されない可能性があると思われます。
Foo/Bar はサード パーティのものである可能性があるため、例外がスローされないことは保証されません。
すべての Dispose 呼び出しを try-catch でラップするだけでは、コードがぎこちなくなります。
これを処理するためのベストプラクティスは何ですか?