__________________ Иван Топорышкин пошел на охоту,
С ним пудель пошел, перепрыгнув забор,
Иван, как бревно провалился в болото,
А пудель в реке утонул, как топор.
Ну там сишарп, я не знаю что они в очередной раз выдумали.
Добавлено сегодня в 19:32:
Вообще конечно интересные дела с этими исключениями. Судя по всему существует два типа обработчика исключений.
Первый - классический, когда стек разматывается обратно и мы выходим из блока try. Ну а дальше по ситуации вызываем либо секцию __except либо секцию __finally. Причём секция __finally будет вызвана в любом случае, т.к. это некий аналог ручного деструктора. В С++ этой секции нет. Почему?
Ну очевидно потому что исключения в С++ самостоятельно и корректно вызывают все деструкторы из всего стека, который они успели накопить на момент проброса исключения или вызова leave; Технически какой сигнал бросать совершенно не важно, исключения это просто очередной механизм обработки событий, эвенты в который могут поступать с разных сторон.
Таким образом становится понятно, что никакого смысла в секции finally попросту нет - всё что было выделено внутри вызванных функций будет корректно уничтожено вызовом деструкторов (в чистом Си не будет сделано вообще ничего), а то что было выделено на одном уровне с блоком try может быть прекрасно освобождено вообще безо всяких дополнительных секций.
Другой конечно вопрос, а как дать программе понять, что нам не нужно бросать исключения, а просто иногда нужен досрочный выход?
Добавлено сегодня в 19:46:
А, вон оно что оказывается. __try, __except, __finally - это SEH.
А try catch throw - это С++. Теперь понятно.