![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
Jcs |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 156 Регистрация: 1.10.2003 Репутация: нет Всего: нет |
Скажите, насколько часто вы используете исключения? Не добавляют ли они больше проблем, чем преимуществ (раздувание кода, быстродействие)? Или они должны использоваться только в самых крайних случаях? Стоит ли при их использовать, если возможна запись по нулевому поинтеру, или следует использовать обычную проверку (к примеру, при реализации пользовательского списка)? Заранее спасибо.
|
|||
|
||||
NiJazz |
|
||||
![]() Jazz coder ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2286 Регистрация: 10.8.2003 Где: Москва Репутация: 1 Всего: 23 |
Как очевидно их преимущество.
Нет. Наоборот - помогают их решить. Исключения - это уже с появления ООП. То есть та же Windows работает не без них. |
||||
|
|||||
Vyacheslav |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 9 Всего: 59 |
Обычная практика. С использованием исключений код становится более прозрачным и лаконичным
-------------------- С уважением, Вячеслав Ермолаев |
|||
|
||||
Vaulter |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1724 Регистрация: 30.12.2002 Где: бункер Репутация: 2 Всего: 22 |
иключения по своей сути задумывались как упрощенная система отлова ошибок и обработки их...
ну и имхо очень удобная получилась система ) часто использую в больших программах, в мелких не имеет смысла. |
|||
|
||||
RAN |
|
|||
Опытный ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 709 Регистрация: 14.3.2003 Где: Щёлково Моск.обл. Репутация: 5 Всего: 6 |
Я программирую, основываясь на двух довольно удобных изобретениях в ООП - исключения и смарт-поинтеры. Первые позволяет легко генерировать и обрабатывать ошибки, а вторые, при этом, позволяют избежать утечек памяти. Всё это делает код очень понятным и небольшим.
Но при этом я против использования исключений в штатных случаях. Исключения - это ошибки или другие исключительные ситуации. Если исключения использовать часто, для выхода из вложенных циклов, или ещё каких вещей, то это только усложнит программу. Но, это только, моя позиция. |
|||
|
||||
Step |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5151 Регистрация: 26.9.2002 Где: дурдом.UA Репутация: 5 Всего: 25 |
RAN, напиши статейку для факю "исключения и смарт-поинтеры"
-------------------- - Дурак учится на своих ошибках, умный на чужих. - умные учатся у дураков |
|||
|
||||
RAN |
|
|||
Опытный ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 709 Регистрация: 14.3.2003 Где: Щёлково Моск.обл. Репутация: 5 Всего: 6 |
Step, не раньше выходных. Но сделаю, раз считаете нужным.
|
|||
|
||||
Vyacheslav |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 9 Всего: 59 |
Если кому интересно, вот дискуссия по данному вопросу, которая проходила на одном из форумов
http://borland.xportal.ru/forum/viewtopic.php?t=6613 -------------------- С уважением, Вячеслав Ермолаев |
|||
|
||||
Step |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5151 Регистрация: 26.9.2002 Где: дурдом.UA Репутация: 5 Всего: 25 |
RAN, нужно, пиши и отправляй мне или любому модератору по факю с++...
-------------------- - Дурак учится на своих ошибках, умный на чужих. - умные учатся у дураков |
|||
|
||||
C'hoosen++ |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 21.1.2004 Репутация: нет Всего: нет |
Я исключения использую редко, и действительно, чем больше программа,
тем больше используешь исключения. |
|||
|
||||
Jcs |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 156 Регистрация: 1.10.2003 Репутация: нет Всего: нет |
Можно ли задать пользовательский абстрактный тип исключения? Например, запись по нулевому указателю или по отрицательному индексу, чтобы далее генерировал их не сам юзер, а приложение?
Хотя в этом случае, наверное, язык уже будет высокоуровневым.. |
|||
|
||||
Vyacheslav |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 9 Всего: 59 |
Что значит "не сам юзер, а приложение?". Исключение генерит всегда именно приложение, а не пользователь. И что такое "абстрактный тип исключения"?
-------------------- С уважением, Вячеслав Ермолаев |
|||
|
||||
NiJazz |
|
|||
![]() Jazz coder ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2286 Регистрация: 10.8.2003 Где: Москва Репутация: 1 Всего: 23 |
Наверное, он имел в виду оператор throw. |
|||
|
||||
Jcs |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 156 Регистрация: 1.10.2003 Репутация: нет Всего: нет |
Я имею в виду возможность пользователя описать не конкретный случай исключительной ситуации, как например
, а саму ситуацию, чтобы приложение само определяло, что есть попытка обратиться по нулевому адресу и генерило соответствующее описанное пользователем исключение. В общем, чтобы пользователю не надо было проверять указатели на ноль, если данный кусок кода находится в критической секции и ситуация обращения по нулевому указателю была описана как исключительная. |
|||
|
||||
bel_nikita |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Эксперт Сообщений: 2304 Регистрация: 12.10.2003 Где: Поезд №21/22 ( ст . Прага ) Репутация: 21 Всего: 47 |
Jcs
не совсем въехал ![]() |
|||
|
||||
FreshMeat |
|
|||
Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 30.1.2004 Репутация: нет Всего: нет |
Пара ссылок - разный взгляд на проблему:
http://www.joelonsoftware.com/items/2003/10/13.html http://www.nedbatchelder.com/text/exceptio...-vs-status.html Вторая статья и ее обсуждение - просто супер Взято здесь: http://rsdn.ru/Forum/Message.aspx?mid=479157&only=1 |
|||
|
||||
Jcs |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 156 Регистрация: 1.10.2003 Репутация: нет Всего: нет |
Судя по всему, такой возможности в С++ нет. Даже если рассудить логически, как ее реализовать, я - например, ума не приложу. Я наивно предполагал, что можно задать исключительную ситуацию, описать ее, и приложение будет само генерить исключение там, где такая ситуация возниакет, т.е. мне, как юзеру не придется делать проверку, что указатель нулевой и писать throw null_ptr, это за меня сделает компилятор. На самом же все придется проверять самому и генерить throw.
Но с другой стороны, в винде же это как-то реализовано... Т.е. определяет же система, что юзер долбится по нулевому адресу. Может быть, конечно, это все можно реализовать на С++, но затраты будут несоизмеримы с премуществами. |
|||
|
||||
bel_nikita |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Эксперт Сообщений: 2304 Регистрация: 12.10.2003 Где: Поезд №21/22 ( ст . Прага ) Репутация: 21 Всего: 47 |
я думаю винда также определяет, но ты можешь автоматизировать этот процесс. взять, например, перегрузить оператор -> вставить условие на нулевой поинтер, и если оператору -> передается ноль, то сгенерить исключение только конечно накладные расходы увеличаться ![]() |
|||
|
||||
Jcs |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 156 Регистрация: 1.10.2003 Репутация: нет Всего: нет |
Да, это будет работать, но только для пользовательских типов, а как быть тогда с указателями на встроенные типы? К тому же проверять-то все равно придется. Можно, в принципе, создать какой-нить класс, который будет являться базовым для всех классов приложения, определить для него оный опрератор и запускать его во всех дочерних. Можно эмулировать также работу встроенных типов. Круто! Тогда нужно будет грамотно реализовать классовую иерархию, чтобы при добавлении нового исключения не переписывать все классы, но это уже проблемы другого плана. Спасибо за идею.
|
|||
|
||||
FreshMeat |
|
||||
Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 30.1.2004 Репутация: нет Всего: нет |
То о чем ты здесь пишешь, не имеет отношения к исключениям с++ и больше напоминает систему ИИ. Причем необычайно мощную. Судя по описанию, компилятор сам должен определить в каких условиях требуется проверять соответствие текущего состояния программы твоим условиям, причем умудряться это делать без потери производительности. Сам понимаешь, задачка не из легких ![]() О том, что такое исключения, лучше всего почитать Страуструпа, в закреплении материала - статьи и их обсуждения. Хотя бы те две, ссылки на которые, я приводил выше. А проверку на нулевой указатель можно произвести напрмер так:
|
||||
|
|||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |