命名空间
变体
操作

std::allocator_traits<Alloc>::allocate_at_least

来自 cppreference.com
 
 
动态内存管理
未初始化内存算法
受约束的未初始化内存算法
分配器
垃圾收集支持
(C++11)(直到 C++23)
(C++11)(直到 C++23)
(C++11)(直到 C++23)
(C++11)(直到 C++23)
(C++11)(直到 C++23)
(C++11)(直到 C++23)



 
 
static constexpr std::allocation_result<pointer, size_type>
    allocate_at_least( Alloc& a, size_type n );
(自 C++23 起)

allocate_at_least 调用 a.allocate_at_least(n) 并返回其结果,如果调用格式正确,否则等同于 return {a.allocate(n), n};.

allocator_at_least 尝试为至少 nvalue_type 对象分配存储空间,并提供一个回退机制,为正好 n 个对象分配存储空间。

内容

[编辑] 参数

a - 用于分配存储空间的分配器
n - 要为其分配存储空间的对象数量的下限

[编辑] 返回值

a.allocate_at_least(n) 如果它格式正确。

否则,std::allocation_result<pointer, size_type>{a.allocate(n), n}.

[编辑] 异常

抛出选定的分配函数抛出的异常,以及抛出时间。

[编辑] 注释

allocate_at_least 的成员函数 Allocator 类型主要用于连续容器,例如 std::vectorstd::basic_string,以通过使它们的容量尽可能匹配实际分配的大小来减少重新分配。由于 allocate_at_least 提供了回退机制,因此可以在适当的情况下直接使用它。

给定一个类型为 Alloc 的分配器对象 a,令 result 表示从 std::allocator_traits<Alloc>::allocate_at_least(a, n) 返回的值,应该通过 a.deallocate(result.ptr, m)(通常通过 std::allocator_traits<Alloc>::deallocate(a, result.ptr, m) 调用)来释放存储空间,以避免内存泄漏。

用于释放的实参 m 必须不小于 n,也不大于 result.count,否则,行为未定义。请注意,如果分配器未提供 allocate_at_least,则 n 始终等于 result.count,这意味着 m 需要等于 n

功能测试 Std 功能
__cpp_lib_allocate_at_least 202302L (C++23) allocate_at_least 等。

[编辑] 示例

[编辑] 另请参见

分配至少与请求大小一样大的未初始化存储空间
(std::allocator<T> 的公共成员函数) [编辑]