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 подскажет развёрнутый ответ в реальном времени.