Вы должны убедиться, что приложение восстановлено в стабильном состоянии после перехвата исключения.Обычно это достигается за счет того, что «забывается» какая-либо операция или изменение (я), вызвавшие исключение, и запускается заново на более высоком уровне.
Это включает в себя гарантию того, что любые ресурсы, выделенные во время цепочки событий, приводящих к исключению, будутправильно выпущен.В C ++ стандартная идиома, гарантирующая, что это RAII .
Обновление
Например, если при обработке запроса на веб-сервере возникает ошибка, он генерируетисключение в некоторой функции более низкого уровня, которая попадает в класс более высокого уровня (возможно, прямо в обработчике запросов верхнего уровня).Обычно лучшее, что можно сделать, - это откатить все сделанные изменения и освободить все ресурсы, выделенные на данный момент, связанные с фактическим запросом, и вернуть соответствующее сообщение об ошибке клиенту.Изменения могут включать в себя транзакции БД, запись в файл и т. Д. - все это необходимо реализовать безопасным образом.Базы данных обычно имеют встроенные транзакции для решения этой проблемы;с другими ресурсами это может быть сложнее.