Re[3]: Исключения(exception) и вызов деструкторов
От: dupamid Россия  
Дата: 02.08.02 07:37
Оценка:
Здравствуйте Павел Кузнецов, Вы писали:

ПК>Маленькое буквоедство: стандарт не различает синхронные и асинхронные исключения, просто говорит, что деление на ноль, в частности, вызывает неопределенное поведение. Что делать в ответ на неопределенное поведение — дело разработчиков компилятора.


По Стандарту исключения синхронные — в том смысле, что они происходят по запросу из программы в явном виде посредством throw и никак иначе, следовательно, если компилятор в коде не видит throw или чего-то еще, что может привести к выбросу исключения, как-то вызов функции без спецификатора throw(), то он считает, что исключение выброшено быть не может и следовательно генерировать код, для его поимки, неэффективно и он его не генерирует. Никаких других исключений в Стандарте С++ нет, другое дело сигналы, они асинхронны. Понятия синхронных и асинхронных исключений, с которыми я оперировал, взяты не из Стандарта, а из описания MS, но они достаточно наглядны и позволяют разобраться, в чем здесь дело и как с этим бороться.

Кстати, правильная работа приводимого примера обеспечивается как раз из-за вызова функции вывода в поток, так как компилятор не знает, выбрасывает ли она исключения, он считает, что она их выбрасывает и генерирует соответствующий код для их поимки.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.