跳到主要内容

std::pmr::polymorphic_allocator<T>::allocate

自 C++20 起
[[nodiscard]] T* allocate( std::size_t n );
C++17 起,到 C++20 止
T* allocate( std::size_t n );

使用底层内存资源为 T 类型的 n 个对象分配存储空间。
等价于 return static_cast<T*>(resource()->allocate(n * sizeof(T), alignof(T)));

参数

n - 要分配存储的对象数量

返回值

指向已分配存储空间的指针。

异常

如果 n > std::numeric_limits<std::size_t>::max() / sizeof(T);,则抛出 std::bad_array_new_length
也可能抛出对 resource()->allocate 的调用所抛出的任何异常。

缺陷报告

以下改变行为的缺陷报告已追溯应用于先前发布的 C++ 标准。

DR应用于发布时的行为正确行为
LWG 3038C++17allocate 可能分配错误大小的存储改为抛出 length_error
LWG 3237C++17allocate 抛出的异常与 std::allocator::allocate 不一致已统一

std::pmr::polymorphic_allocator<T>::allocate

自 C++20 起
[[nodiscard]] T* allocate( std::size_t n );
C++17 起,到 C++20 止
T* allocate( std::size_t n );

使用底层内存资源为 T 类型的 n 个对象分配存储空间。
等价于 return static_cast<T*>(resource()->allocate(n * sizeof(T), alignof(T)));

参数

n - 要分配存储的对象数量

返回值

指向已分配存储空间的指针。

异常

如果 n > std::numeric_limits<std::size_t>::max() / sizeof(T);,则抛出 std::bad_array_new_length
也可能抛出对 resource()->allocate 的调用所抛出的任何异常。

缺陷报告

以下改变行为的缺陷报告已追溯应用于先前发布的 C++ 标准。

DR应用于发布时的行为正确行为
LWG 3038C++17allocate 可能分配错误大小的存储改为抛出 length_error
LWG 3237C++17allocate 抛出的异常与 std::allocator::allocate 不一致已统一