std::allocator_traits<Alloc>::allocate_at_least
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
尝试为至少 n 个 value_type
对象分配存储空间,并提供一个回退机制,为正好 n 个对象分配存储空间。
内容 |
[编辑] 参数
a | - | 用于分配存储空间的分配器 |
n | - | 要为其分配存储空间的对象数量的下限 |
[编辑] 返回值
a.allocate_at_least(n) 如果它格式正确。
否则,std::allocation_result<pointer, size_type>{a.allocate(n), n}.
[编辑] 异常
抛出选定的分配函数抛出的异常,以及抛出时间。
[编辑] 注释
allocate_at_least
的成员函数 Allocator 类型主要用于连续容器,例如 std::vector 和 std::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 等。 |
[编辑] 示例
本节不完整 原因:没有示例 |
[编辑] 另请参见
(C++23) |
分配至少与请求大小一样大的未初始化存储空间 ( std::allocator<T> 的公共成员函数) |