Namespaces
Variants
Views
Actions

std::allocator_traits<Alloc>::allocate

From cppreference.com
 
 
Dynamic memory management
Smart pointers
(C++11)
(C++11)
(C++11)
(until C++17)
(C++11)
(C++23)
Allocators
Memory resources
Uninitialized storage
Uninitialized memory algorithms
Constrained uninitialized memory algorithms
Garbage collection support
(C++11)(until C++23)
(C++11)(until C++23)
(C++11)(until C++23)
(C++11)(until C++23)
(C++11)(until C++23)
(C++11)(until C++23)
Miscellaneous
(C++20)
(C++11)
(C++11)
 
 
Defined in header <memory>
(1)
static pointer allocate( Alloc& a, size_type n );
(since C++11)
(until C++20)
[[nodiscard]] static constexpr pointer allocate( Alloc& a, size_type n );
(since C++20)
(2)
static pointer allocate( Alloc& a, size_type n,
                         const_void_pointer hint );
(since C++11)
(until C++20)
[[nodiscard]] static constexpr pointer allocate( Alloc& a, size_type n,
                                                 const_void_pointer hint );
(since C++20)

Uses the allocator a to allocate n*sizeof(Alloc::value_type) bytes of uninitialized storage. An array of type Alloc::value_type[n] is created in the storage, but none of its elements are constructed.

1) Calls a.allocate(n)
2) Additionally passes memory locality hint hint. Calls a.allocate(n, hint) if possible. If not possible (e.g. a has no two-argument member function allocate()), calls a.allocate(n)

Contents

[edit] Parameters

a - allocator to use
n - the number of objects to allocate storage for
hint - pointer to a nearby memory location

[edit] Return value

The pointer returned by the call to a.allocate(n)

[edit] Notes

Alloc::allocate was not required to create array object until P0593R6, which made using non-default allocator for std::vector and some other containers not actually well-defined according to the core language specification.

After calling allocate and before construction of elements, pointer arithmetic of Alloc::value_type* is well-defined within the allocated array, but the behavior is undefined if elements are accessed.

[edit] See also

allocates uninitialized storage
(public member function of std::allocator<T>) [edit]