|
Программирование >> Структурное программирование
Упражнения для самопроверки 13.1. Перечислите пять обычных примеров исключений. 13.2. Приведите несколько причин, по которым методы обработки исключений не должны использоваться для обычного программного управления. 13.3. Почему целесообразно использовать исключения для обработки ошибок, вызванных библиотечными функциями? 13.4. Что такое - утечка ресурса ? 13.5. Если в блоке try не генерируются никакие исключения, куда передается управление после того, как блок try завершит работу? 13.6. Что произойдет, если исключение будет сгенерировано вне блока try? 13.7. Укажите основное достоинство и основной недостаток использования catch (...). 13.8. Что произойдет, если ни один из обработчиков не соответствует типу сгенерированного объекта? 13.9. Что случится, если несколько обработчиков соответствуют типу сгенерированного объекта? 13.10. Почему программисту может быть желательно определить базовый тип класса как тип обработчика catch и затем генерировать объекты типов производных классов? 13.11. Как можно написать обработчик catch, чтобы обработать родственные типы ошибок без использования наследования классов исключений? 13.12. Какой тип указателя надо использовать в обработчике catch, чтобы перехватывать любое исключение типа указатель? 13.13. Предположите, что доступен обработчик catch с точным соответствием типу объекта исключения. При каких обстоятельствах может выполняться не этот, а другой обработчик для объектов исключения этого типа? 13.14. Должна ли генерация исключения вызывать завершение программы? 13.15. Что происходит, когда обработчик catch генерирует исключение? 13.16. Что делает оператор throw;? 13.17. Как программист ограничивает типы исключений, которые могут генерироваться в функции? 13.18. Что происходит, если функция генерирует исключение типа, не допускаемого спецификацией исключений этой функции? 13.19. Что происходит с автоматическими объектами, которые были созданы в блоке try, когда этот блок генерирует исключение? Ответы на упражнения для самопроверки 13.1. Нехватка памяти, выход индекса за пределы массива, арифметическое переполнение, деление на нуль, недопустимые параметры функций. 13.2. (а) Обработка исключений создана, чтобы обрабатывать нечасто встречающиеся ситуации, но которые часто приводят к завершению программы, так что от авторов компиляторов не требуется, чтобы выполнение обработки исключений проводилось оптимально. (Ь) Поток управления со стандартными управляющими структурами вообще более ясен и более эффективен, чем применение исключений, (с) Могут появляться проблемы, связанные с тем, что стек может не разматываться и ресурсы, распределенные до возникновения исключения, могут не освобождаться, (d) Дополнительные исключения могут попадаться на пути подлинных исключений, связанных с ошибками. Поэтому программисту становится труднее следить за большим числом исключений. Например, можно ли быть действительно уверенным в том, какое из исключений перехватывается обработчиком catch (...)? 13.3. Маловероятно, чтобы библиотечная функция выполняла такую обработку ошибок, которая удовлетворяла бы потребности всех пользователей. 13.4. Прерывание выполнения программы может оставить ресурс в состоянии, в котором другие программы не будут способны его использовать. 13.5. Обработчики исключений (в блоках catch) для этого блока try пропускаются и программа продолжает выполнение, начиная с оператора после последнего блока catch. 13.6. Исключение, сгенерированное вне блока try, вызывает обращение к функции terminate. 13.7. Обработчик вида catch (...) перехватывает ошибки любого типа, генерирующиеся в блоке try. Достоинство заключается в том, что никакая ошибка не может ускользнуть от обработки. Недостаток заключается в том, что такой обработчик catch не имеет параметра и, значит, не может ссылаться на информацию в сгенерированном объекте; следовательно, он не может знать причину ошибки. 13.8. Это вызовет продолжение поиска соответствия в следующем внешнем блоке try. При продолжении этого процесса может оказаться, что в программе не имеется ни одного обработчика, соответствующего типу сгенерированного объекта; в этом случае вызывается функция завершения terminate, которая по умолчанию вызывает в свою очередь функцию abort. Альтернативная функция terminate может быть задана как аргумент функции set terminate. 13.9. Выполняется первый из соответствующих обработчиков исключения после блока try. 13.10. Это прекрасный способ перехватывать родственные типы исключений. 13.11. Сделайте единственный класс исключения и обработчик catch для группы исключений. При возникновении каждого исключения можно создавать объект исключения с различными закрытыми данными. Обработчик catch может просматривать эти закрытые данные и определять тип исключения. 13.12. Void *. 13.13. Если обработчик, использующий стандартные преобразования, будет записан перед обработчиком с точным соответствием. 13.14. Нет, но завершается выполнение блока, в котором сгенерировано исключение. 13.15. Исключение будет обработано обработчиком catch (если таковой существует), связанным с блоком try (если он есть), включающим тот обработчик catch, который вызвал исключение. 13.16. Он генерирует повторное исключение. 13.17. Записывает спецификацию исключений, представляющую собой список типов исключений, которые могут генерироваться в функции. 13.18. Вызывается функция unexpected. 13.19. В процессе разматывания стека вызываются деструкторы каждого из этих объектов. Упражнения 13.20. Составьте список различных исключительных ситуаций, которые встречаются в программах данной книги. Внесите в список сколько сможете дополнительных исключительных ситуаций. Для каждой из них кратко опишите, как программа могла бы обработать данное исключение, используя методы обработки исключений, рассмотренные в этой главе. Некоторые типичные исключения; деление на нуль, арифметическое переполнение, выход индекса массива за допустимые пределы, нехватка свободной памяти и т.д. 13.21. При каких обстоятельствах программист мог бы не указывать имя параметра при описании типа объекта, который будет перехватываться обработчиком? 13.22. Программа содержит оператор throw; Где обычно встречается этот оператор? Что будет, если этот оператор появляется в другой части программы? 13.23. При каких обстоятельствах вы бы использовали следующий оператор? catch (...) { throw;} 13.24. Сравните обработку исключений с другими способами обработки ошибок, рассмотренными в этой главе.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки. |