Spec-Zone.ru › C++

std::allocator_traits<Alloc>::construct

Объявлен в заголовке <memory>
template< class T, class... Args >
static void construct( Alloc& a, T* p, Args&&... args );
(начиная с C++11)
(constexpr начиная с C++20)

Если это возможно, конструирует объект типа T в выделенной неинициализированной памяти, на которую указывает p, вызывая a.construct(p, std::forward<Args>(args)...).

Если это невозможно (например, Alloc не имеет функцию-член construct()), то вызывает

::new (static_cast<void*>(p)) T(std::forward<Args>(args)...)

(до C++20)

std::construct_at(p, std::forward<Args>(args)...)

(начиная с C++20)

Параметры

a - аллокатор, используемый для конструирования
p - указатель на неинициализированную память, в которой будет сконструирован объект T
args... - аргументы конструктора, передаваемые в a.construct() или в размещающий new(до C++20)std::construct_at()(начиная с C++20)

Примечания

Эта функция используется контейнерами стандартной библиотеки при вставке, копировании или перемещении элементов.

Поскольку эта функция автоматически обращается к размещающему new, функция-член construct() является необязательным требованием к аллокатору.

(начиная с C++11)

Пример

#include <memory>

struct foo
{
    virtual int bar() { return 0; }
    virtual ~foo() {}
};

int main()
{
    std::allocator<foo> al;
    using traits = std::allocator_traits<decltype(al)>;
    foo* p = traits::allocate(al, 1);
    traits::construct(al, p);
    p->bar();
    traits::destroy(al, p);
    traits::deallocate(al, p, 1);
}

См. также

operator newoperator new[]
функции выделения памяти
(функция)
construct
(до C++20)
конструирует объект в выделенной памяти
(открытая функция-член std::allocator<T>)
construct_at
(C++20)
создаёт объект по заданному адресу
(шаблон функции и функциональный объект-алгоритм)
ranges::construct_at
(C++20)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/memory/allocator_traits/construct

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API