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[]
используется для удаления массива объектов. Подробнее см. .