Easyпамять

Чем delete отличается от delete[]?

1Постановка

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

2Решение

`delete` удаляет одиночный объект (из new). `delete[]` — массив (из new[]). Смешивание — UB.

Widget* w = new Widget();
delete w;               // OK: одиночный

Widget* arr = new Widget[10];
delete[] arr;           // OK: массив

// delete arr;          // UB: вызовет деструктор только первого
// delete[] w;          // UB: прочитает «длину» из мусора

Компилятор не предупреждает — в типе указателя этой информации нет. В современном C++ обе формы почти не нужны: std::vector, std::unique_ptr<T[]> управляют автоматически.

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

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

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