std::allocator_traits<Alloc>::construct
From cppreference.com
| 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
Run this code
#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) |