Насколько я знаю, размещение new
не выделяет память, а представляет собой форму оператора new
, который берет указатель на уже выделенную память и создает там объект.
Но меня так смущает этот текст из 5-го издания учебника по С++:
Вместо этого мы используем форму размещения
new
отnew
(§ 12.1.2, стр. 460) для создания объекта. Как мы видели, эта формаnew
предоставляет дополнительную информацию для функции распределения. Мы можем использовать размещениеnew
для передачи адреса, и в этом случае новое выражение размещения имеет вид
new (place_address) type
new (place_address) type (initializers)
new (place_address) type [size]
new (place_address) type [size] { braced initializer list }
где place_address должен быть указателем, а инициализаторы предоставляют (возможно, пустой) список инициализаторов, разделенных запятыми, для использования для создания вновь выделенного объекта.
При вызове с адресом и без других аргументов размещение new использует оператор new(size_t, void*) для «выделения» своей памяти. Это версия оператора new, которую нам не разрешено переопределять (§ 19.1.1, стр. 822). Эта функция не выделяет никакой памяти; он просто возвращает аргумент-указатель. Затем общее новое выражение завершает свою работу, инициализируя объект по заданному адресу. По сути, размещение new позволяет нам создать объект по определенному заранее выделенному адресу памяти.
Примечание
При передаче одного аргумента, который является указателем, новое выражение размещения создает объект, но не выделяет память.
Что это означает. При вызове с адресом и без других аргументов размещение new использует оператор new(size_t, void*) для «выделения» своей памяти.? Означает ли это размещение новых вызовов функции для выделения памяти?
- Также в примечании говорится, что когда при размещении new передается один аргумент, который является указателем, он создает объект, но не выделяет память: означает ли это, что если передано более одного аргумента, он может выделить память?
Может ли кто-нибудь прояснить это для меня? Благодарю вас!