информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Страшный баг в WindowsГде водятся OGRыСетевые кракеры и правда о деле Левина
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Phrack #70/0x46 
 Возможно, Facebook наступил на... 
 50 лет электронной почте 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
все доски
FAQ
IRC
новые сообщения
site updates
guestbook
beginners
sysadmin
programming
operating systems
theory
web building
software
hardware
networking
law
hacking
gadgets
job
dnet
humor
miscellaneous
scrap
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
Я тоже не вижу особого смысла. Тем более, что спецификации... 06.03.09 21:51  Число просмотров: 2295
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
> Я вот начал их использовать, но по-правде говоря не вижу
> большого в них смысла. Какое ваше мнение на этот счет?
Я тоже не вижу особого смысла. Тем более, что спецификации исключений не входят в сигнатуру функции и в принципе при определенном везении можно огрести трудноуловимых проблем.

> Стоит ли по каждому поводу лепить throw(...)? Очень многие
> функции работают с динамической памятью и эксепшены могут
> теоретически вылетать очень запросто. С другой стороны если
А при чем здесь память? Вообще то эксепшоны должны выкидываться в ответ на любую непредвиденную ситуацию (собственно эксепшон). Будь то access denied при открытии файла или невалидные данные от юзера. bad_alloc - на самом деле одно из самых редких исключений.

> памяти перестало хватать - ситуацию уже вряд ли спасешь
> эксепшенами, и можно вывалиться в unexpected(). Или другая
Зато можно спасти бэдаллоком, который ГАРАНТИРОВАННО можно бросить (в смысле стандарт требует, чтобы места под объект-исключение bad_alloc хватало ВСЕГДА, даже когда на все остальное памяти уже нет). И да, по unexpected ситуацию вообще не спасешь - можно только сделать дамп памяти для дебага или что то в том же духе. Независимо от того, сколько у тебя памяти

> ситуация: функция не должна выкидывать эксепшены, но
> теоретически где-то у нее внутри есть операции с
> указателями, и в качестве "невозможной ситуации" вполне
Ситуация не невозможная, а исключительная - разные вещи. Исключительные ситуации вполне ожидаемы.

> может вылететь эксепшн при использовании, например,
> нулевого указателя.
Аппаратные исключения кэтчатся не всегда: не всеми компиляторами и не при любых настройках (насколько я помню стандарт вообще ничего не говорит о том, как с ними работать). В VC есть два способа: поставить se_translator или catch(...) с асинхронными исключениями (/EHa)

> То есть получается, что с одной стороны, если честно
> объявлять как throw(...) все функции, которые умеют чисто
> физически выкидывать эксепшены, то приедется так объявлять
> 99% всего что пишешь. Мне конечно не сложно, но однако ж.
Да

> Если же игнорить потенциальные ошибки с указателями и
> динамической памятью - теряется вообще смысл в эксепшенах и
> потенуиальные падения системы, которые даже толком потом и
> не отловишь.
Ты ЧИВО? Эксепшоны ВООБЩЕ не предназначены для отлавливания неправильной работы с указателями (для этого есть умные указатели). Независимо от этого экспепшены сами по себе - КРАЙНЕ полезная фича плюсов, а вот спецификации этих самых исключений не используются практически нигде (кроме разве что спецификации throw() )

> В общем, я в замешательстве. Что скажете?
<programming> Поиск 








Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2021 Dmitry Leonov   Page build time: 1 s   Design: Vadim Derkach