Удалить один массив объекта? - PullRequest
2 голосов
/ 21 марта 2010

Я не уверен, удаляются ли обе эти работы:

p = new int[1];

delete p

и

delete [] p;

Если оба работают, в чем разница между двумя delete с?

Ответы [ 3 ]

4 голосов
/ 21 марта 2010

Массив одного экземпляра все еще является массивом. Здесь просто нет особого случая, поэтому вам нужно рассматривать его как массив, а не как отдельный объект. Не массив delete может произойти сбой.

Массиву объектов может предшествовать число, обозначающее размер массива. В таком случае delete[], а не delete, достаточно умен, чтобы передать правильный указатель на free.

2 голосов
/ 21 марта 2010

Они не одинаковы.Хотя delete p будет компилироваться, но потенциально может вызвать проблемы во время выполнения.

delete p вызовет operator delete(void*), где delete [] вызовет operator delete[](void*).По умолчанию delete[] вызывает delete, но если реализован пользовательский оператор для delete [], он не будет вызываться, если вы просто вызовите delete, и у вас возникнет проблемаone).

Хорошее эмпирическое правило: если вы использовали [] в new, используйте его в delete.

1 голос
/ 21 марта 2010

delete p удаляет только один элемент.delete [] p удаляет массив.Если вы используете new type[], то используйте delete [].

Если у вас new есть [], то delete имеет [].

Кстати, где-то должен быть точный дубликат этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...