MediumRAIIGC

Чем C++ без GC справляется с управлением памятью?

1Постановка

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

2Решение

C++ использует детерминированное уничтожение через деструкторы: разработчик точно знает, когда объект умрёт (выход из scope, удаление указателя). RAII автоматизирует это — unique_ptr/shared_ptr для памяти, lock_guard для мьютексов, fstream для файлов.

void process() {
    auto p = std::make_unique<Widget>();   // RAII: авто-delete
    std::lock_guard<std::mutex> lk(m);    // RAII: авто-unlock
    std::ifstream file("data.txt");        // RAII: авто-close
}  // деструкторы вызываются детерминированно, в обратном порядке

Преимущества перед GC: предсказуемость (нет пауз — важно для real-time), своевременное освобождение некомпьютерных ресурсов (GC не знает про файлы/сокеты), меньше overhead. Недостаток: ответственность за ownership.

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

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

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