Обработка собственных исключений |
Здравствуйте, гость ( Вход | Регистрация )
Обработка собственных исключений |
legat |
17.5.2011, 12:59
Сообщение
#1
|
Студент Группа: Новичок Сообщений: 10 Регистрация: 8.8.2010 Пользователь №: 1940 Спасибо сказали: 0 раз(а) Репутация: 0 |
Суть проблемы:
Пытаюсь подключиться к SQLite БД в конструкторе класса DataWork. Пытаюсь в БД создать таблицу. Если таблица уже создана, то должно отработать исключение. Раскрывающийся текст
В теле функции ExecuteSQL выводится сообщение об ошибке (простая проверка, что сообщение вообще что-то содержит): error happend!: table users already exists. Так и должно быть. Затем должно отработать моё исключение, но вместо этого выводится terminate called after throwing an instance of 'DataWork::Error' Аварийный останов. Программирую на клоне Debian. Как сделать так, чтобы обработалось моё исключение и программа продолжила свою работу, т.е. вывела тестовое сообщение 'end of program'. |
|
|
Rocky |
17.5.2011, 14:34
Сообщение
#2
|
Старейший участник Группа: Участник Сообщений: 530 Регистрация: 22.12.2008 Из: Санкт-Петербург Пользователь №: 463 Спасибо сказали: 22 раз(а) Репутация: 7 |
Наверное не
а
|
|
|
Litkevich Yuriy |
19.5.2011, 7:04
Сообщение
#3
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
Rocky, угу, так и выглядит оператор try-catch
|
|
|
Rocky |
19.5.2011, 9:57
Сообщение
#4
|
Старейший участник Группа: Участник Сообщений: 530 Регистрация: 22.12.2008 Из: Санкт-Петербург Пользователь №: 463 Спасибо сказали: 22 раз(а) Репутация: 7 |
Да я в курсе)))) Это сарказм )))
legat, вообще не очень хорошо, если конструктор класса генерирует исключение. |
|
|
Litkevich Yuriy |
19.5.2011, 14:01
Сообщение
#5
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
Rocky |
20.5.2011, 20:50
Сообщение
#6
|
Старейший участник Группа: Участник Сообщений: 530 Регистрация: 22.12.2008 Из: Санкт-Петербург Пользователь №: 463 Спасибо сказали: 22 раз(а) Репутация: 7 |
legat, вообще не очень хорошо, если конструктор класса генерирует исключение. если исключения и использовать, то лучше в конструкторе.Извини, не соглашусь. Погугли на тему "с++ исключение в конструкторе". Или есть такая книга Саттера "Решение сложных задач на С++". Я бы не стал говорить что лучше именно в конструкторе. Можно, но с головой. Это же относится и ко всему коду. В смысле если везде лепить блоки try/catch бездумно. Это вообще довольно сложная тема, и даже многие гуру до конца не понимают как это все работает. |
|
|
Iron Bug |
20.5.2011, 22:08
Сообщение
#7
|
Профессионал Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12 |
по-моему, использование исключения в конструкторе - нормальная практика. ошибки и утечки тут могут быть только из-за невнимательности программиста.
собственно, конструктор вообще не может вернуть ничего, кроме исключения, в случае ошибки. так что это нормально. |
|
|
PAFOS |
6.6.2011, 16:52
Сообщение
#8
|
Активный участник Группа: Участник Сообщений: 258 Регистрация: 27.12.2010 Из: Дмитров Пользователь №: 2309 Спасибо сказали: 29 раз(а) Репутация: 8 |
обработка исключений вообще платформозависимая тема (в плане реализации на нативном коде)
Но по сути она куда более сложна чем возврат кодов состояния. Цитата конструктор вообще не может вернуть ничего, кроме исключения, в случае ошибки. так что это нормально. Можно возвращать значения по указателям и ссылкам, например. Что я хотел сказать - исключения более ресурсоемкие по сравнению с возвращением кодов состояния. Лично я использую их в тех местах, где надо сделать что-то вроде транзакции. Так они более эффективны. |
|
|
Iron Bug |
6.6.2011, 23:10
Сообщение
#9
|
Профессионал Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12 |
Что я хотел сказать - исключения более ресурсоемкие по сравнению с возвращением кодов состояния. собственно, обычно исключения - это именно исключения конечно, в медленных приложениях их иногда юзают как метод разруливания сложных алгоритмических скачков, но я их предпочитаю использовать именно для обработки ошибок: то есть, когда уже произошёл какой-то генеральный кикоз и надо откатывать всю последовательность и производить какое-то восстановление состояния. кстати, ещё неясно, что быстрее и проще - вернуть из какой-нибудь десятой вложенности стопицот кодов ошибок или кинуть исключение. это точно так же приведёт к работе со стеком. Сообщение отредактировал Iron Bug - 6.6.2011, 23:11 |
|
|
Текстовая версия | Сейчас: 29.3.2024, 4:02 |