Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
Я тоже не вижу особого смысла. Тем более, что спецификации... 06.03.09 21:51 Число просмотров: 2492
Автор: amirul <Serge> Статус: The Elderman
|
> Я вот начал их использовать, но по-правде говоря не вижу > большого в них смысла. Какое ваше мнение на этот счет? Я тоже не вижу особого смысла. Тем более, что спецификации исключений не входят в сигнатуру функции и в принципе при определенном везении можно огрести трудноуловимых проблем.
> Стоит ли по каждому поводу лепить throw(...)? Очень многие > функции работают с динамической памятью и эксепшены могут > теоретически вылетать очень запросто. С другой стороны если А при чем здесь память? Вообще то эксепшоны должны выкидываться в ответ на любую непредвиденную ситуацию (собственно эксепшон). Будь то access denied при открытии файла или невалидные данные от юзера. bad_alloc - на самом деле одно из самых редких исключений.
> памяти перестало хватать - ситуацию уже вряд ли спасешь > эксепшенами, и можно вывалиться в unexpected(). Или другая Зато можно спасти бэдаллоком, который ГАРАНТИРОВАННО можно бросить (в смысле стандарт требует, чтобы места под объект-исключение bad_alloc хватало ВСЕГДА, даже когда на все остальное памяти уже нет). И да, по unexpected ситуацию вообще не спасешь - можно только сделать дамп памяти для дебага или что то в том же духе. Независимо от того, сколько у тебя памяти
> ситуация: функция не должна выкидывать эксепшены, но > теоретически где-то у нее внутри есть операции с > указателями, и в качестве "невозможной ситуации" вполне Ситуация не невозможная, а исключительная - разные вещи. Исключительные ситуации вполне ожидаемы.
> может вылететь эксепшн при использовании, например, > нулевого указателя. Аппаратные исключения кэтчатся не всегда: не всеми компиляторами и не при любых настройках (насколько я помню стандарт вообще ничего не говорит о том, как с ними работать). В VC есть два способа: поставить se_translator или catch(...) с асинхронными исключениями (/EHa)
> То есть получается, что с одной стороны, если честно > объявлять как throw(...) все функции, которые умеют чисто > физически выкидывать эксепшены, то приедется так объявлять > 99% всего что пишешь. Мне конечно не сложно, но однако ж. Да
> Если же игнорить потенциальные ошибки с указателями и > динамической памятью - теряется вообще смысл в эксепшенах и > потенуиальные падения системы, которые даже толком потом и > не отловишь. Ты ЧИВО? Эксепшоны ВООБЩЕ не предназначены для отлавливания неправильной работы с указателями (для этого есть умные указатели). Независимо от этого экспепшены сами по себе - КРАЙНЕ полезная фича плюсов, а вот спецификации этих самых исключений не используются практически нигде (кроме разве что спецификации throw() )
> В общем, я в замешательстве. Что скажете?
|
|
|