Easyraii

Что такое RAII и почему это основа C++?

1Постановка

Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.

2Решение

RAII (Resource Acquisition Is Initialization) — ресурс (память, файл, сокет, мьютекс) захватывается в конструкторе объекта и освобождается в деструкторе. Время жизни ресурса совпадает с временем жизни объекта.

void process(const std::string& path) {
    std::ifstream f(path);   // открыли файл (захват ресурса)
    std::lock_guard<std::mutex> lk(mtx);  // заблокировали мьютекс
    // ... работаем ...
}  // деструкторы вызовутся автоматически — файл и мьютекс освободятся

Когда объект выходит из scope, компилятор автоматически вызывает деструктор — даже при исключениях или return из середины. Все стандартные контейнеры, std::string, std::unique_ptr, std::lock_guard — примеры RAII. Альтернативы (manual open/close, lock/unlock) неустойчивы к исключениям и забывчивости.

3Как отвечать

  • Сначала уточните условия и ограничения, покажите аналитическое мышление.
  • Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
  • Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡

На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.