Об удалении, удалении [], операторе delete () и т. Д. [Duplicate]

Возможные дубликаты:
Как delete [] «знает» размер массива операндов?
(POD) освобождает память: удаление [] равно удалению?

Как я понимаю, следующее

class A {};
A* a = new A;
//
delete A;

приведет сначала к звонкуoperator new() (глобальный или специализированный, предоставляемый A) для выделения нужного объема памяти, а затем для вызова конструктора A. И когдаdelete называется, сначала вызовет деструктор А, а затем вызоветoperator delete() освободить «нужное количество памяти».

Как я читал в TC ++ PL, этот «правильный объем памяти» определяется следующим образом:

Чтобы освободить пространство, выделенное для new, delete и delete [] должны иметь возможность определять размер выделенного объекта. Это подразумевает, что объект, выделенный с использованием стандартной реализации new, будет занимать немного больше места, чем статический объект. Как правило, одно слово используется для хранения размера объекта.

Это имеет смысл. Но где хранится это слово, чтобы быть доступным дляdelete ? Прямо перед адресом, указанным новым указателем? Чтобыdelete можно получить размер, который будет удален путем доступаa-sizeof<void*> ?

Вы можете уточнить это?

Я думаю, что ответ на этот вопрос может помочь мне понять, какdelete [] работает. Я понимаю какnew [] будет работать, и этоdelete [] сначала вызовет деструкторы для "всех объектов массива" и освободит всю эту память ...

Но как можноdelete [] знать размер массива?

Спасибо за ваши полезные ответы!

Ответы на вопрос(1)

Ваш ответ на вопрос