std::allocator_traits<Alloc>::construct
Defined in header <memory> | ||
|---|---|---|
template< class T, class... Args > static void construct( Alloc& a, T* p, Args&&... args ); |
(since C++11) (constexpr since C++20) |
If possible, constructs an object of type T in allocated uninitialized storage pointed to by p, by calling a.construct(p, std::forward<Args>(args)...).
If the above is not possible (e.g. Alloc does not have the member function construct()), then calls
|
| (until C++20) |
|
| (since C++20) |
Parameters
| a | - | allocator to use for construction |
| p | - | pointer to the uninitialized storage on which a T object will be constructed |
| args... | - | the constructor arguments to pass to a.construct() or to placement-new(until C++20)std::construct_at()(since C++20) |
Notes
This function is used by the standard library containers when inserting, copying, or moving elements.
| Because this function provides the automatic fall back to placement new, the member function | (since C++11) |
Example
#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);
}
See also
| allocation functions (function) |
|
|
(until C++20) | constructs an object in allocated storage (public member function of std::allocator<T>) |
|
(C++20) | creates an object at a given address (function template & algorithm function object) |
|
(C++20) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/memory/allocator_traits/construct