Dynamic memory management
Uninitialized storage
Garbage collection support
C Library
Low level memory management
template< class U, class CtorArgs... >
U* new_object( CtorArgs&&... ctor_args );
(since C++20)

Allocates and constructs an object of type U.

Equivalent to

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


ctor_args - the arguments to forward to the the constructor of U

Return value

A pointer to the allocated and constructed object.


This function was introduced for use with the fully-specialized allocator std::polymorphic_allocator<>, but it may be useful in any specialization as a shortcut to avoid having to rebind from std::polymorphic_allocator<T> to std::polymorphic_allocator<U>, and having to call allocate, construct, and deallocate individually.

Since U is not deduced, it must be provided as a template argument when calling this function.


May throw any exceptions thrown by the call to allocate_object or the constructor of U.

See also

Allocate raw aligned memory from the underlying resource
(public member function)
Allocates raw memory suitable for an object or an array
(public member function)
Allocate memory
(public member function)
allocates uninitialized storage using the allocator
(public static member function of std::allocator_traits<Alloc>)
allocates memory
(public member function of std::pmr::memory_resource)