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()), то вызывает
|
| (до C++20) |
|
| (начиная с C++20) |
Параметры
| a | - | аллокатор, используемый для конструирования |
| p | - | указатель на неинициализированную память, в которой будет сконструирован объект T |
| args... | - | аргументы конструктора, передаваемые в a.construct() или в размещающий new(до C++20)std::construct_at()(начиная с C++20) |
Примечания
Эта функция используется контейнерами стандартной библиотеки при вставке, копировании или перемещении элементов.
| Поскольку эта функция автоматически обращается к размещающему new, функция-член | (начиная с 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);
}
См. также
| функции выделения памяти (функция) |
|
|
(до C++20) | конструирует объект в выделенной памяти (открытая функция-член std::allocator<T>) |
|
(C++20) | создаёт объект по заданному адресу (шаблон функции и функциональный объект-алгоритм) |
|
(C++20) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/memory/allocator_traits/construct