![]() |
|
Модераторы: bsa |
![]()
|
|
| Podarochek |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 94 Регистрация: 2.11.2007 Репутация: нет Всего: нет |
Уважаемые. Скажите пожалуйста, что-то не очень с книг я и пойму, зачем эти "исключительные ситуации", разве нельзя обойтись обычной проверкой, например условными операторами?
Добавлено через 10 минут и 21 секунду вот два примера - один с книги(1), один мой(2)
|
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
Добавлено через 1 минуту и 10 секунд попробуй применить оба способа и почуствуешь разницу )) Это сообщение отредактировал(а) mes - 23.5.2008, 19:41 |
|||
|
||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 6 Всего: 162 |
В частности, компилятор даёт тебе гарантию что, исключительная ситуация не может быть пропущена просто так. А ты не можешь дать гарантию, что ты не забудешь в коде проверить возвращённое значение. |
|||
|
||||
| rrrFer |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 208 Регистрация: 11.5.2008 Где: Красноярск Репутация: 0 Всего: 1 |
тут
я вот тоже недавно думал зачем такое придумали...единственное что придумал, что неплохо бы их использовать с классами, чтобы например ошибки некоторой функции класса обрабатывались в одном месте все, а если эта функция конструктор/деструктор, то в одном месте их обработать иначе затруднительно, потому-что конструкторы не возвращают значений. представляю я это себе так:
ну я так это себе представляю... |
|||
|
||||
| Podarochek |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 94 Регистрация: 2.11.2007 Репутация: нет Всего: нет |
наверно в конструкторе поставить проверку if(ch){cout<<"Error";exit(0);} или еще раз попытаться выделить как тут поможет исключение ну я же всеравно должен описать исключение, почему же я могу ее тоже не забыть? |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
но когда составляешь класс не знаешь в каком месте проги он будет вызван и как имено надо поступить с такой ошибкой например программа ворд и в ней открыт важный документ - тут создается класс наш класс.. не хватает памяти .. прога вылетила и ничего не сохранила... теперь представь лицо и радостные возгласы, того кто всю ночь просидел над составлением этого доклада и не успел сохранить. )) поэтому любая исключительная ситуация должна обрабатываться с внешней стороны. попробуй осушествить проверку "снаружи" (в момент создания и использования объекта) Добавлено через 1 минуту и 15 секунд
не совсем так... но это позже.. |
|||
|
||||
| Podarochek |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 94 Регистрация: 2.11.2007 Репутация: нет Всего: нет |
то действие которое будет выполняться в обработчике ситуации, можно поставить непосредственно и в условие проверки без исключительной ситуации...Вижу рациональность пока только в выносе обработки с основного кода... |
|||
|
||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 1 Всего: 110 |
а в приведённом примере исключения и не нужны (детально не изучал - исхожу только из того, что всё в пределах одной функции)
исключения нужны, когда выполнить заказанное действие не получается, а что с этим делать в данном месте непонятно коды возврата не так уж и удобны во-первых, в разных исключительных ситуациях можно передавать разное количество информации об ошибке: где-то строку, где-то матрицу или ещё что-то, просто код ошибки много информации не передаст, а если и передаст то далеко не всегда в удобном для её доставания виде во-вторых, куча проверок в вызывающих функциях делает код значительно менее читабельным, а если вызывающая функция вообще ничего не может делать с кодом кроме как просто передать его дальше, то в неё появляется код, который к её логике не имеет никакого отношения -------------------- qqq |
|||
|
||||
| Rififi |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1254 Регистрация: 9.3.2008 Репутация: 3 Всего: 36 |
Исключения повышают безопасность программы.
"Если функция сообщает о возникновении исключительной ситуации, устанавливая флаг статуса или возвращая код ошибки, то нет никакой гарантии, что модуль, вызвавший функцию, проверит этот флаг или код возврата. В результате работа программы может продолжиться, невзирая на исключительную ситуацию. Если же функция сообщает об опасной ситуации с помощью исключения, а это исключение не обрабатывается, работа программы тут же прекращается" © С. Мейерс, "Наиболее эффективное использование C++" Об исключениях (как и о многом другом) можно прочитать в этой книге. |
|||
|
||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 6 Всего: 118 |
new не генерирует исключений вроде как.
-------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 6 Всего: 162 |
||||
|
||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 6 Всего: 118 |
да, действительно bad_alloc возбуждается... но где-то в блогах про никс читал что может и не узнать что нет памяти.... чет такое было... мб путаю.
-------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
| Fazil6 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 7 Всего: 60 |
с помощюью исключительной ситуации ты можешь обрабатывать ошибку там где ты ее можешь обработать, а в случае проврки ты должен обрабатывать там, где она случилась. |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
там где ты знаешь как ее обработать |
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |