Easyпамять
Чем new[] отличается от new для массива объектов?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
new T[n] выделяет память под n объектов и вызывает конструктор по умолчанию для каждого. delete[] вызывает деструктор для каждого и освобождает память. Для реализации delete[] компилятор хранит n в служебной памяти перед массивом.
int* arr = new int[100]; // new[]: вызовет конструкторы для 100 int
delete[] arr; // delete[]: деструкторы + освобождение
Widget* w = new Widget; // одиночный new: без overhead количества
delete w; // delete (не delete[]!)
// смешивание new/delete[] или new[]/delete — UBnew T[n]хранит n в служебной памяти (несколько байт overhead);- Смешивание
new/delete[]илиnew[]/delete— UB; - В современном коде
new[]почти не нужен —std::vectorуправляет массивом, безопасен при исключениях, не теряет размеры.
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.