std::allocator_traits<Alloc>::allocate

来自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 前)



 
 
[[nodiscard]] 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 提供,以通过使得其容量在可能时匹配实际分配的大小减少重分配。由于 std::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_leastn 始终等于 result.count ,这表示要求 m 等于 n

功能特性测试 标准
__cpp_lib_allocate_at_least 202302L (C++23)

示例

参阅

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