跳到主要内容

std::pmr::polymorphic_allocator<T>::new_object

自 C++20 起
template< class U, class... CtorArgs >
[[nodiscard]] U* new_object( CtorArgs&&... ctor_args );

分配并构造一个 U 类型的对象。

给定的 alloc 是一个 std::pmr::polymorphic_allocator<T>

U* p = alloc.new_object<U>(std::forward<CtorArgs>(ctor_args)...);

等同于

U* p = alloc.allocate_object<U>();
try {
alloc.construct(p, std::forward<CtorArgs>(ctor_args)...);
} catch (...) {
alloc.deallocate_object(p);
throw;
}

参数

ctor_args - 传递给 U 的构造函数的参数

返回值

指向已分配和构造的对象。

备注

此函数是为了与完全特化的分配器 std::pmr::polymorphic_allocator<> 一起使用而引入的,但它也可以在任何特化中使用,作为一种快捷方式,避免了从 std::pmr::polymorphic_allocator<T> 重新绑定到 std::pmr::polymorphic_allocator<U>,并且需要单独调用 allocate、construct 和 deallocate。

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

异常

可能会抛出 allocate_object 调用或 U 的构造函数抛出的任何异常。

std::pmr::polymorphic_allocator<T>::new_object

自 C++20 起
template< class U, class... CtorArgs >
[[nodiscard]] U* new_object( CtorArgs&&... ctor_args );

分配并构造一个 U 类型的对象。

给定的 alloc 是一个 std::pmr::polymorphic_allocator<T>

U* p = alloc.new_object<U>(std::forward<CtorArgs>(ctor_args)...);

等同于

U* p = alloc.allocate_object<U>();
try {
alloc.construct(p, std::forward<CtorArgs>(ctor_args)...);
} catch (...) {
alloc.deallocate_object(p);
throw;
}

参数

ctor_args - 传递给 U 的构造函数的参数

返回值

指向已分配和构造的对象。

备注

此函数是为了与完全特化的分配器 std::pmr::polymorphic_allocator<> 一起使用而引入的,但它也可以在任何特化中使用,作为一种快捷方式,避免了从 std::pmr::polymorphic_allocator<T> 重新绑定到 std::pmr::polymorphic_allocator<U>,并且需要单独调用 allocate、construct 和 deallocate。

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

异常

可能会抛出 allocate_object 调用或 U 的构造函数抛出的任何异常。