Error handling
E.19
Используйте объект `final_action` для очистки, если подходящий дескриптор ресурса недоступен
Причина
finally из GSL менее многословен и сложнее ошибиться, чем try/catch.
Пример
void f(int n)
{
void* p = malloc(n);
auto _ = gsl::finally([p] { free(p); });
// ...
}
Примечание
finally не так запутан, как try/catch, но всё ещё является специальным решением. Отдавайте предпочтение правильным объектам управления ресурсами. Рассматривайте finally как последнее средство.
Примечание
Использование finally — это систематическая и достаточно чистая альтернатива старой технике goto exit; для обработки очистки там, где управление ресурсами не является систематическим.
Контроль
Эвристика: Обнаруживайте goto exit;