Три точки для создания здесь:
Во-первых, существует минимальная потеря производительности в фактическом наличии блоков try-catch в Вашем коде. Это не должно быть соображением, стараясь избегать наличия их в Вашем приложении. Хит производительности только играет роль, когда исключение выдается.
то, Когда исключение выдается в дополнение к операциям раскручивания стека и т.д., которые происходят, какие другие упомянули Вас, должно знать, что целый набор связанного с временем выполнения/отражением материала происходит для заполнения членов класса исключений, таких как объект отслеживания стека и различные участники типа и т.д.
, я полагаю, что это - одна из причин, почему общие рекомендации, если Вы собираетесь повторно бросить исключение, ко всего throw;
, а не выдайте исключение снова или создайте новое как в тех случаях, все те данные стека повторно собраны, тогда как в простом броске это все сохраняется.
Да, что интересно, в POSIX есть стандартный способ получить строковое сообщение из сигнала. Совершенно случайно это strsignal ()
. Из POSIX.1-2008:
Функция strsignal () должна отображать номер сигнала в signum в строку, определяемую реализацией, и должна возвращать указатель на нее. Он должен использовать тот же набор сообщений, что и функция psignal ().
Среда, которая не предоставляет вам эту функцию, несовместима с POSIX. Хотя относительно новый (Выпуск 7 вышел в 2008 году), у меня есть справочная страница для strsignal ()
в Mac OS X , так что это хороший знак.
Определенный извне массив sys_siglist
содержит описания сигналов для каждого номера сигнала и является стандартным для BSD.
#include <signal.h>
extern const char *const sys_siglist[];