Error handling
E.17
Не пытайтесь перехватить каждое исключение в каждой функции
Причина
Перехват исключения в функции, которая не может предпринять осмысленных действий по восстановлению, ведёт к сложности и потере ресурсов. Позвольте исключению распространяться до функции, способной его обработать. Позвольте действиям по очистке на пути раскрутки стека обрабатываться через RAII.
Пример (не делайте так)
void f() // плохо
{
try {
// ...
}
catch (...) {
// никаких действий
throw; // проброс исключения
}
}
Контроль
- Отмечайте вложенные блоки try.
- Отмечайте файлы исходного кода со слишком высоким соотношением блоков try к функциям. (??? Проблема: определить «слишком высокое»)