Easyraiiexceptions
Что такое RAII в контексте исключений?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
RAII гарантирует освобождение ресурса в деструкторе — даже при исключении. Без RAII освобождение легко пропустить.
// ПЛОХО: при throw в doWork — утечка, release не вызовется
void f() {
auto r = acquire();
doWork(r); // если бросит — release пропущен
release(r);
}
// ХОРОШО: RAII-обёртка — release в деструкторе, вызовется всегда
void f() {
ResourceGuard r(acquire());
doWork(r.get()); // даже при throw — деструктор очистит
}Все стандартные контейнеры, smart pointers, std::lock_guard — RAII. «Голые» new/delete, lock/unlock — code smell.
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.