Как и в любом C ++, применяется следующее универсальное правило:
Поймать все исключения, которые могут быть выданы, и только , если , вы можете ответить на них осмысленно.
Вы можете также перехватить все другие исключения (...
) и создать сообщение в журнале или что-то в этом роде, но затем вам придется сбросить их (throw;
). Если в вашем коде вы ничего не можете сделать, кроме как прервать какую-либо операцию, вам не нужно обрабатывать исключение. Пусть он пузырится до места, где он может использоваться осмысленно.
В вашем коде вы должны будете разрешить хотя бы ошибки распределения памяти (std::bad_alloc
), чтобы вы могли проверить их, если это имеет смысл. Но опять же, если вы не знаете, что ловите, мало что можно сделать с тем, что вы ловите.
Сказать, что ваша «программа не может потерпеть неудачу», может значить только очень много. В конечном счете, если у вас есть ошибка выделения в структуре данных верхнего уровня, вы ничего не можете сделать . Лучший сценарий, который я могу себе представить, - это если ваша основная функция обрабатывает некоторые данные в цикле; в этом случае вы можете поместить универсальный блок try вокруг цикла, а в случае исключения вы просто переходите к следующему раунду. Но я бы посчитал это примером того, как можно «осмысленно обработать исключение», так что это всего лишь частный случай вышеизложенного. В общем, хотя вы можете захотеть обернуть всю свою основную функцию в блок try, вы просто должны будете принять, что в конечном общем случае у вас нет большого выбора, кроме как прервать программу.