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}。
异常
在选择的分配函数抛出异常时会抛出该异常。
注解
分配器 (Allocator) 类型的 allocate_at_least
成员函数主要为连续容器,例如 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。
功能特性测试宏 | 值 | 标准 | 功能特性 |
---|---|---|---|
__cpp_lib_allocate_at_least |
202302L | (C++23) | allocate_at_least 等
|
示例
本节未完成 原因:暂无示例 |
缺陷报告
下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。
缺陷报告 | 应用于 | 出版时的行为 | 正确行为 |
---|---|---|---|
LWG 3887 | C++23 | P2652R0 没有更新功能特性测试宏 | 已更新 |
参阅
(C++23) |
分配与请求的大小至少一样大的未初始化存储 ( std::allocator<T> 的公开成员函数) |