![]() |
|
|
![]()
|
|
| zkv |
|
|||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 16 Всего: 92 |
Здравствуйте. Вопрос назрел давно. Поисковики молчат. Помогите.
Есть ли какие-то неписанные правила организации механизма исключений в приложении? (больше всего интересует вопрос касаемо MFC- приложений c MDI и Document/View support, если это принципиально) Т.е. как следует правильно все это дело реализовать, чтобы потом, когда кто-нибудь будет разбирать мой код не плевался в монитор? Также, как вы считаете все ли возможные исключения следует отлавливать? Например, метод CView::GetDocument() (допустим мы не знаем, что у него внутри, некоторый черный ящик), стоит ли предусматривать возможность перехвата исключения которое он может сгенерировать? Или об этом уже за меня "кто-то" подумал? По части MFC, нормально ли использовать класс CException во всех случаях жизни. К примеру при ошибке в операторе new генерируется исключение bad_alloc, следует перехватывать его или работать с CMemoryException, или вообще по старинке проверять указатель и потом лепить что-то свое? Не будет "караться" использование каких либо своих типов исключений? __________________________________________ На данный момент вижу один вариант реализации этого самого механизма - берем и во все-все методы, прям в их тело на всю ширину пихаем try-блоки вместе с catch-ами за ними, и прям на месте все подряд ловим и перерабатываем. В результате всех этих действий код раздувается неимоверно. У меня есть подозрение, что это не самый лучший путь, но как по другому сделать своего ума не хватает. Подскажите, есть ли какие нибудь статьи или книжки, где эти вопросы освещены? Ну и в идеале, конечно, хотелось бы услышать мнение профессионалов Винграда! (прогиб, надеюсь, зафиксирован, как говорили в нашей роте |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
В MFC-framework встроен перехват всех необработанных исключений CException во внешнем цикле обработки сообщений. Так что в этом смысле там все "схвачено": необработанное исключение будет корректно обработано, и программа продолжит работу. Насколько нормально - зависит от того, насколько exception-safe твой код. Но это только для наследников CException. Другие исключение, в т.ч. и исключения стандартной библиотеки, нужно перехватывать самому.
Ужас, летящий на крыльях ночи... Ну, во-первых, в нормальном коде исключения могут возникать только по внешним причинам: пользователь ввел какую-нибудь дрянь, жесткий диск внезапно выпал, и т.д. Таких мест не так много, их все можно и нужно обработать. Где и как - зависит от обстоятельств. Главное, чтобы после перехвата исключения программа могла нормально продолжаться. Все остальные исключения, в том числе структурные (обращения по невалидному адресу и т.д.) должны быть устранены путем тщательной отладки. В критичные модули (или во внешний цикл сообщений) можно добавить обработчик catch (std::excpetion) и catch (...). Есть еще bad_alloc, но, если программа не работает с огромными блоками памяти, тоже экзотика. А если работает - см. выше. -------------------- ... |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |