命名空间
变体
操作

std::allocator_traits<Alloc>::allocate_at_least

来自 cppreference.cn
 
 
内存管理库
(仅用于演示*)
未初始化内存算法
(C++17)
(C++17)
(C++17)
受约束的未初始化
内存算法
C 库

分配器
内存资源
垃圾回收支持
(C++11)(直到 C++23)
(C++11)(直到 C++23)
(C++11)(直到 C++23)
(C++11)(直到 C++23)
(C++11)(直到 C++23)
(C++11)(直到 C++23)
未初始化存储
(直到 C++20*)
(直到 C++20*)
显式生命周期管理
 
 
static constexpr std::allocation_result<pointer, size_type>
    allocate_at_least( Alloc& a, size_type n );
(since 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}

[编辑] 异常

抛出所选分配函数抛出的任何异常以及抛出时机。

[编辑] 注释

`Allocator` 类型的 allocate_at_least 成员函数主要为连续容器(例如 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

特性测试 标准 特性
__cpp_lib_allocate_at_least 202302L (C++23) allocate_at_least 等等。

[编辑] 示例

[编辑] 参见

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