[allocator.members] (original) (raw)

20 Memory management library [mem]

20.2 Memory [memory]

20.2.10 The default allocator [default.allocator]

20.2.10.2 Members [allocator.members]

Except for the destructor, member functions of the default allocator shall not introduce data races ([intro.multithread]) as a result of concurrent calls to those member functions from different threads.

Calls to these functions that allocate or deallocate a particular unit of storage shall occur in a single total order, and each such deallocation call shall happen before the next allocation (if any) in this order.

constexpr T* allocate(size_t n);

Returns: A pointer to the initial element of an array of n T.

Throws: bad_array_new_length ifnumeric_limits<size_t>​::​max() / sizeof(T) < n, orbad_alloc if the storage cannot be obtained.

Remarks: The storage for the array is obtained by calling ​::​operator new ([new.delete]), but it is unspecified when or how often this function is called.

This function starts the lifetime of the array object, but not that of any of the array elements.

constexpr allocation_result<T*> allocate_at_least(size_t n);

Returns: allocation_result<T*>{ptr, count}, where ptr is a pointer to the initial element of an array of count T andcount ≥ n.

Throws: bad_array_new_lengthif numeric_limits<size_t>​::​max() / sizeof(T) < n, or bad_alloc if the storage cannot be obtained.

Remarks: The storage for the array is obtained by calling ​::​operator new, but it is unspecified when or how often this function is called.

This function starts the lifetime of the array object, but not that of any of the array elements.

constexpr void deallocate(T* p, size_t n);

Preconditions:

Effects: Deallocates the storage referenced by p.

Remarks: Uses​::​operator delete ([new.delete]), but it is unspecified when this function is called.