Недавно я изучал некоторые сложные ошибки об объекте, который не был удален.
Я нашел некоторый шаблон в коде. Сообщается, что некоторые 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, код окажется неуклюжим.
Какая наилучшая практика для этого?