Delete vs delete []
Возможный дубликат:
(POD) освобождение памяти: delete [] равно удалению?
Когда меня учили С++, это было давно. Мне сказали никогда не использовать delete, но delete[], поскольку выполнение delete[] на одном объекте будет эквивалентно delete. Зная, что не слишком доверяйте учителям, интересно, правда ли это?
Есть ли причина для вызова delete вместо delete[]?
Я просмотрел, возможно, связанные вопросы в SO, но не нашел четкого ответа.
Ответы
Ответ 1
Из стандарта (5.3.5/2):
В первом варианте (удалить объект), значение операнда delete должен быть указателем на объект без массива или указатель на под-объект (1.8), представляющий базу класс такого объекта (п. 10). Если нет, поведение undefined.
Во втором варианте (delete массив), значение операнда delete - значение указателя которые возникли из предыдущего массива новое выражение. Если нет, поведение undefined.
Нет, нет: они никоим образом не эквивалентны!
Ответ 2
delete [] является "векторным удалением" и соответствует вектору new, т.е. new[].
Вы должны использовать соответствующую пару распределителей. Например. malloc/free, new/delete, new[]/delete[], иначе вы получите поведение undefined.
Ответ 3
Нет! вы вызываете delete[] при назначении с помощью new[], иначе вы вызываете delete.
Что учитель сказал вам, ведет к поведению undefined и, если вам повезет, сбой приложения.
Ответ 4
delete используется для удаления одного объекта, а delete[] используется для удаления массива объектов. Подробнее см. .