std::allocate_at_least
| 在标头 <memory> 定义
|
||
| template< class Alloc > [[nodiscard]] constexpr std::allocation_result< |
(C++23 起) | |
std::allocate_at_least 调用 a.allocate_at_least(n) 并返回其结果,若该调用为良构,否则它等价于 return {a.allocate(n), n}; 。
对于分配器 (Allocator) a , std::allocator_at_least 尝试分配至少 n 个 Alloc::value_type 对象的存储,并提供准确 n 个对象的存储的后备机制(类似 std::allocator_traits 所提供者)。
参数
| a | - | 用于分配存储的分配器 |
| n | - | 要分配存储的对象数的下界 |
返回值
a.allocate_at_least(n) 若它为良构,否则为 {a.allocate(n), n} 。
异常
在选择的分配函数抛出时抛出其所抛的异常。
注解
分配器 (Allocator) 类型的 allocate_at_least 成员函数主要为连续容器,例如 std::vector 与 std::basic_string 提供,以通过使得其容量在可能时匹配实际分配的大小减少重分配。由于 std::allocate_at_least 提供后备机制,故能在适合处直接使用它。
给定 Alloc 类型的分配器对象 a ,令 result 代表从 std::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 。
示例
| 本节未完成 原因:暂无示例 |
参阅
| (C++23) |
分配与请求的大小至少一样大的未初始化存储 ( std::allocator<T> 的公开成员函数) |
| (C++11) |
提供关于分配器类型的信息 (类模板) |