Я не уверен, что если обе эти работы, чтобы удалить:Удалить один массив объектов?
p = new int[1];
delete p
и
delete [] p;
Если оба произведения, в чем разница между этими двумя delete
с?
Я не уверен, что если обе эти работы, чтобы удалить:Удалить один массив объектов?
p = new int[1];
delete p
и
delete [] p;
Если оба произведения, в чем разница между этими двумя delete
с?
delete p
удаляет только один элемент. delete [] p
удаляет массив. Если вы используете new type[]
, используйте delete []
.
Если у вас new
есть []
, то delete
имеет []
.
Кстати, должно быть точное дублирование этого.
Массив одного экземпляра по-прежнему представляет собой массив. Просто нет особого случая, поэтому вам нужно рассматривать его как массив, а не отдельный объект. Неархиво delete
может вылететь из строя.
Множество объектов может предшествовать число, обозначающее размер массива. Если это так, delete[]
, а не delete
, достаточно умен, чтобы передать правильный указатель на free
.
Это не такие же. Несмотря на то, что delete p
будет компилироваться, но может потенциально вызвать проблемы во время выполнения.
delete p
будет ссылаться на operator delete(void*)
, где delete []
позвонит operator delete[](void*)
. По умолчанию используется значение delete[]
для вызова delete
, но если пользовательский оператор для delete []
был реализован, он не будет вызываться, если вы просто вызываете delete
, и у вас будет проблема (возможно, тихая).
Хорошее эмпирическое правило, если вы использовали []
в new
, используйте его в delete
.
Не правило, требование. – GManNickG
«new» и 'delete' должны совпадать, или у вас есть неопределенное поведение. Попытка работать на одной платформе - это возможный результат неопределенного поведения, а также грохот всего ужасного. Не делай этого. – GManNickG