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