std::allocator_traits<Alloc>::construct - cppreference.com
From cppreference.com
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); }