Возможный дубликат:
(POD) освобождение памяти: delete [] равно удалению?
Удаляет ли delete
элементы за пределами первого в массиве?
char *s = new char[n];
delete s;
В этом случае имеет значение, поскольку все элементы s
распределены смежно, и не должно быть delete
только часть массива?
Для более сложных типов delete
вызывает деструктор объектов за пределами первого?
Object *p = new Object[n];
delete p;
Как delete[]
вывести число Object
за пределы первого, не означает ли это, что он должен знать размер выделенной области памяти? Что, если область памяти была выделена с некоторым выступом по соображениям производительности? Например, можно предположить, что не все распределители обеспечивали детализацию одного байта. Тогда любое конкретное распределение может превышать требуемый размер для каждого элемента целым элементом или более.
Для примитивных типов, таких как char
, int
, есть ли разница между:
int *p = new int[n];
delete p;
delete[] p;
free p;
За исключением маршрутов, принимаемых соответствующими вызовами через механизм освобождения от отказа delete
→ free
?