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