Выдача исключения, естественно, должна выполняться только в исключительной ситуации.
Для обработки я бы сказал, что есть два обстоятельства, когда вы хотите поймать исключение:
когда нужно выполнить перевод
- на код ошибки
- на другое исключение
- на что-то, что пользователь может понять
на границе модуля
- Возврат из COM-вызовов, например (в среду без учета исключений)
- Возврат из потока(иначе поймать некого)
- Возвращено из функции обратного вызова (поскольку маловероятно, что механизм обратного вызова узнает или позаботится о вашем исключении.)
Если вы окажетесьделая попытку-поймать-очистить-перебросить вещи, используйте RAII и избавьтесь от попытки ... поймать полностью.Напишите свой код так, чтобы, если исключение произошло, оно действовало в здравом смысле.Посмотрите Гарантии Абрахама для подробностей о том, что это влечет за собой.
Ответ на MakerOfThings7 ниже, потому что это было слишком долго для комментария.
Автор: "Что-то, что пользователь может понять,«Я имею в виду, например, всплывающее сообщение об ошибке.
Представьте, если хотите, пользователь нажимает кнопку на пользовательском интерфейсе вашего приложения, чтобы перейти и получить некоторые данные.Ваш обработчик нажатия кнопки отправляет некоторый интерфейс хранения данных.Этот интерфейс может получать данные из потока памяти, из файла, из базы данных.Кто знает?В свою очередь, это может привести к сбою, генерируя исключение MemoryStreamException, FileException или DatabaseException.Они могли быть сброшены на 15 кадров стека и были правильно проигнорированы хорошо написанным безопасным для исключений кодом, который не нуждался в их переводе.
Обработчик нажатия кнопки ничего не знает об этом, потому что расширяетсяармия методов хранения данных, доступных для интерфейса хранения данных.Таким образом, интерфейс хранения данных улавливает эти исключения и переводит их в DataStorageException общего назначения.Это выбрасывается.
Затем обработчик нажатия кнопки, который вызвал интерфейс хранения данных, перехватывает это исключение и имеет достаточно информации, чтобы иметь возможность отображать какое-то сообщение об ошибке пользователю, переводит исключение в какой-то красиво отформатированный текст и представляет его.