Defined in header
template< class T, class Alloc, class... Args >
shared_ptr<T> allocate_shared( const Alloc& alloc, Args... args );
Constructs an object of type
T and wraps it in a std::shared_ptr using
args as the parameter list for the constructor of
All memory allocation is done using a copy of alloc, which satisfies the
Allocator requirements. The copy constructor and the destructor of
Alloc must not throw exceptions.
|alloc||-|| The |
|args...||-|| list of arguments with which an instance of |
std::shared_ptr of an instance of type
Can throw the exceptions thrown from Alloc::allocate() or from the constructor of
T. If an exception is thrown, this function has no effect.
This function typically allocates memory for the T object and for the shared_ptr's control block with a single memory allocation (it is a non-binding requirement in the Standard). In contrast, the declaration
std::shared_ptr<T> p(new T(Args...)) performs at least two memory allocations, which may incur unnecessary overhead.
A copy of
alloc is stored as part of the control block so that it can be used to deallocate it once both shared and weak reference counts reach zero.