最近,我正在研究一些关于没有处理的对象的棘手错误.
我在代码中找到了一些模式.据报道,有些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;
}
Run Code Online (Sandbox Code Playgroud)
我怀疑Foo.Dispose可能会抛出异常,因此不会执行以下代码,因此不会释放m_bar.
由于Foo/Bar可能来自第三方,因此不保证不会抛出异常.
如果只使用try-catch包装所有Dispose调用,代码将变得笨拙.
处理这个问题的最佳做法是什么?