![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
А что будет если перед вызовом throw; исключений небыло. Ведь throw без параметров просто повторно запускает последнее перехваченное исключение. Это сообщение отредактировал(а) Lazin - 5.10.2007, 09:40 |
|||
|
||||
| antropod |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 23.5.2007 Репутация: нет Всего: нет |
А что если попробовать так.
Конечно, дублирование кода = плохо, поэтому можно поступить следующим образом: Кидать исключение, если все прошло успешно, и обрабатывать во вложенном try..catch:
Это сообщение отредактировал(а) antropod - 5.10.2007, 13:52 |
||||
|
|||||
| Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 51 Всего: 70 |
antropod, а не легче RAII использовать и не париться? ;) ты бы ещё longjump использовал
|
|||
|
||||
| nickless |
|
|||
![]() Гентозавр ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2976 Регистрация: 29.8.2005 Где: Germany Репутация: 19 Всего: 181 |
Будет медленнее работать, исключения не расчитаны на то, чтобы их всё время кидали -------------------- ![]() Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies - Linus Torvalds |
|||
|
||||
| archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
-------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
я про то, что SEH - это платформо-зависимая вещь -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| 0lmer |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 115 Регистрация: 3.12.2006 Репутация: нет Всего: -1 |
||||
|
||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
ограничение на использование запятых там плохое ((
нельзя функции многие вызвать |
|||
|
||||
| archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
Ещё и такая конструкция(достаточно распространённая, между прочим) облажается(должна вывести "catch finally"):
-------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
с этим дефайном?
так же нельзя, два catch(...) |
|||
|
||||
| archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
О чём я и сказал: -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
гы
а как она может быть тогда растпространенной, если она не компилируется? ) |
|||
|
||||
| archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
Эта конструкция распространена в языках, поддерживающих finally - там она компилируется и работает. В С++ finally нет, а этот пример я привёл в подтверждение того, что упомянутое здесь решение через define далеко не самое лучшее(с RAII вообще ничего не сравнится -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
| akizelokro |
|
|||
![]() Крокодил ![]() ![]() Профиль Группа: Участник Сообщений: 761 Регистрация: 30.7.2007 Репутация: 1 Всего: 5 |
На мой взгляд, все дело в том, что хронологически C++ механизм exception появился раньше введения finally в других языках и Microsoft реализации (а); нацеленность на гибкость (б) С самого начала заложено, что после обработки исключения программа не должна автоматически вызывать terminate, а должна иметь возможность продолжить работу со следующей инструкции за блоком try-catch. Конструкция finally в том виде, в котором она применяется, чаще всего принуждается к уничтожению динамических объектов, освобождению ресурсов (и т.д. по списку), и в этом случае в 99% случаев уже нет смысла говорить о дальнейшем выполнении программы ( или функции). -------------------- a = a + b; b = a - b; a = a - b; |
|||
|
||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 17 Всего: 110 |
хмм... если уж поразмышлять о причинах отсутствия finally в С++, то мне кажется, что дело, скорее, в наличии там стековых переменных, которые автоматически удаляются с вызовами соответствующих деструкторов при при выходе из блока по return, throw или goto
в Delphi с этим сложнее: более-менее сложных стековых объектов просто нет, а те, что в куче, сами по себе не удаляются (знатоки Delphi, поправьте, если глупости говорю), вот и нужно место, где в любой ситуации можно удалить созданные объекты... -------------------- qqq |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |