Здравствуйте, Дарней, Вы писали:
Д>Здравствуйте, Павел Кузнецов, Вы писали:
ПК>>Снова-таки, "аналог" не вполне аналогичен. using решает проблему вызова освобождения ресурсов в случае исключений, но (!) перекладывает обязанность по слежению за этим на пользователей класса. Плюс, если в классе, ранее не требовавшем "специального" освобождения ресурсов, эти ресурсы таки появятся, старый код сломается. В случае использования деструкторов разработчик класса контролирует эти моменты прозрачно для пользователя. В общем, снова-таки, using кого-то, может, и устраивает, но полагать это адекватной заменой для всех пользователей...
Д>Можно рассматривать это и как плюс. Большое количество скрытой активности в деструкторах часто очень осложняет жизнь. Кстати говоря, выброс исключения из Dispose не может обрушить прогу — в отличие от C++
Зато исключение в Dispose может оставить программу в неопределенном состоянии, и это явно хуже, чем "обрушить прогу". И кстати, не "обрушить", а вызвать terminate(), в котором ты волен произвести необходимые действия перед завершением (послать crash dump разработчику, например).