Error handling
E.18
Минимизируйте явное использование `try`/`catch`
Причина
try/catch многословен, и нетривиальное его использование чревато ошибками. try/catch может быть признаком несистематического и/или низкоуровневого управления ресурсами или обработки ошибок.
Пример (плохой)
void f(zstring s)
{
Gadget* p;
try {
p = new Gadget(s);
// ...
delete p;
}
catch (Gadget_construction_failure) {
delete p;
throw;
}
}
Этот код запутан. Может произойти утечка через необработанный указатель в блоке try. Обрабатываются не все исключения. Удаление объекта, конструирование которого завершилось неудачей, почти наверняка является ошибкой. Лучше:
void f2(zstring s)
{
Gadget g {s};
}
Альтернативы
Контроль
??? сложно, нужна эвристика