Mediumsmart-pointers

Почему нужно избегать raw new/delete?

1Постановка

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

2Решение

Raw new/delete — источник багов: забытый delete (утечка), double delete, delete при throw, delete[] vs delete mismatch.

// ПЛОХО: ручное управление
void f() {
    Widget* p = new Widget();
    doWork();          // если бросит — утечка
    delete p;
}

// ХОРОШО: RAII-умные указатели
void f() {
    auto p = std::make_unique<Widget>();
    doWork();          // авто-удаление даже при throw
}

// Ещё лучше: контейнер или stack-объект
void f() {
    Widget p;          // stack — авто-удаление
    doWork();
}

Raw new нужен только при написании своей RAII-обёртки или placement new.

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

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

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