命名空间
变体
操作

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 );
(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> 的公共成员函数) [编辑]