std::allocate_at_least

来自cppreference.com
< cpp‎ | memory
 
 
工具库
通用工具
格式化库 (C++20)
(C++11)
关系运算符 (C++20 中弃用)
整数比较函数
(C++20)(C++20)(C++20)
(C++20)
swap 与类型运算
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
常用词汇类型
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)

初等字符串转换
(C++17)
(C++17)
栈踪
 
动态内存管理
智能指针
(C++11)
(C++11)
(C++11)
(C++17 前)
(C++11)
(C++23)
分配器
allocate_at_least
(C++23)
内存资源
未初始化存储
未初始化内存算法
受约束的未初始化内存算法
垃圾收集支持
(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++11)
(C++11)
C 库
低层内存管理
 
定义于头文件 <memory>
template< class Alloc >

[[nodiscard]] constexpr std::allocation_result<
    typename std::allocator_traits<Alloc>::pointer>

    allocate_at_least( Alloc& a, std::size_t n );
(C++23 起)

std::allocate_at_least 调用 a.allocate_at_least(n) 并返回其结果,若该调用为良构,否则它等价于 return {a.allocate(n), n};

对于分配器 (Allocator) astd::allocator_at_least 尝试分配至少 nAlloc::value_type 对象的存储,并提供准确 n 个对象的存储的后备机制(类似 std::allocator_traits 所提供者)。

参数

a - 用于分配存储的分配器
n - 要分配存储的对象数的下界

返回值

a.allocate_at_least(n) 若它为良构,否则为 {a.allocate(n), n}

异常

在选择的分配函数抛出时抛出其所抛的异常。

注解

分配器 (Allocator) 类型的 allocate_at_least 成员函数主要为连续容器,例如 std::vectorstd::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_leastn 始终等于 result.count ,这表示要求 m 等于 n

示例

参阅

分配与请求的大小至少一样大的未初始化存储
(std::allocator<T> 的公开成员函数)
提供关于分配器类型的信息
(类模板)