跳到主要内容

std::pmr::polymorphic_allocator<T>::allocate_object

自 C++20 起
template< class U >
[[nodiscard]] U* allocate_object( std::size_t n = 1 );

使用底层内存资源为 n 个 U 类型对象分配存储空间。

如果 std::numeric_limits<std::size_t>::max() / sizeof(U) < n,则抛出 std::bad_array_new_length,否则等同于 return static_cast<U*>(allocate_bytes(n * sizeof(U), alignof(U)) );

参数

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

返回值

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

备注

此函数是为了与完全特化的分配器 std::pmr::polymorphic_allocator<> 一起使用而引入的,但它在任何特化中都可能很有用,作为一种快捷方式,避免了必须从 std::pmr::polymorphic_allocator<T> 重新绑定到 std::pmr::polymorphic_allocator<U>

由于 U 不是推导的,因此在调用此函数时必须将其作为模板参数提供。

异常

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

std::pmr::polymorphic_allocator<T>::allocate_object

自 C++20 起
template< class U >
[[nodiscard]] U* allocate_object( std::size_t n = 1 );

使用底层内存资源为 n 个 U 类型对象分配存储空间。

如果 std::numeric_limits<std::size_t>::max() / sizeof(U) < n,则抛出 std::bad_array_new_length,否则等同于 return static_cast<U*>(allocate_bytes(n * sizeof(U), alignof(U)) );

参数

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

返回值

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

备注

此函数是为了与完全特化的分配器 std::pmr::polymorphic_allocator<> 一起使用而引入的,但它在任何特化中都可能很有用,作为一种快捷方式,避免了必须从 std::pmr::polymorphic_allocator<T> 重新绑定到 std::pmr::polymorphic_allocator<U>

由于 U 不是推导的,因此在调用此函数时必须将其作为模板参数提供。

异常

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