std::allocator_traits<Alloc>::allocate_at_least

来自cppreference.com
 
 
动态内存管理
未初始化内存算法
受约束的未初始化内存算法
分配器
垃圾收集器支持
(C++11)(C++23 前)
(C++11)(C++23 前)
(C++11)(C++23 前)
(C++11)(C++23 前)
(C++11)(C++23 前)
(C++11)(C++23 前)



 
 
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

示例

缺陷报告

下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。

缺陷报告 应用于 出版时的行为 正确行为
LWG 3887 C++23 P2652R0 没有更新功能特性测试宏 已更新

参阅

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