template<class T, class... Args>
shared_ptr<T> make_shared(Args&&... args);
template<class T, class A, class... Args>
shared_ptr<T> allocate_shared(const A& a, Args&&... args);
Effects: Выделяет память, подходящую для объекта типа, T и создает объект в этой памяти через размещение new-expression ::new (pv) T(std::forward<Args>(args)...). В шаблоне для выделения памяти allocate_shared используется копия a . Если выбрасывается исключение, функции не действуют.
Remarks: shared_ptr Конструктор вызывается этой функции позволяет shared_from_this с адресом создаваемого объекта типа T. Реализации должны выполнять не более одного распределения памяти. [ Note: Это обеспечивает эффективность, эквивалентную навязчивому интеллектуальному указателю. ] — end note