Что такое delete[] в C++?

«Что такое delete[] в C++?» — вопрос из категории Other, который задают на 24% собеседований AQA / Automation. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

delete[] — это оператор в C++, предназначенный для освобождения памяти, ранее выделенной для массива с помощью оператора new[].

Ключевые моменты:

  • Парность: Если память была выделена через new Type[size], то освобождать её обязательно нужно через delete[]. Использование простого delete вместо delete[] для массива ведёт к неопределённому поведению (undefined behavior), утечкам памяти или повреждению кучи.
  • Вызов деструкторов: delete[] гарантированно вызывает деструкторы для всех объектов в массиве в порядке, обратном их созданию, а затем освобождает память.

Пример:

// Выделение памяти для массива из 10 объектов MyClass
MyClass* array = new MyClass[10];

// ... работа с массивом ...

// Корректное освобождение памяти
delete[] array;
array = nullptr; // Хорошая практика — обнулить указатель

Связь с тестированием (QA):

  • Статический анализ: Инструменты статического анализа кода (например, PVS-Studio, Clang-Tidy) могут обнаруживать ошибки парности new[]/delete[].
  • Динамический анализ: Инструменты динамического анализа, такие как Valgrind (Memcheck) или AddressSanitizer, помогают находить утечки памяти и ошибки при работе с кучей, возникающие из-за несоответствия new[] и delete.
  • Code Review: Тестировщик, участвующий в ревью кода, должен обращать внимание на корректность управления памятью в критических участках C++ кода.