Использование _std::makeunique() и _std::makeshared() может привести к киданию исключение _std::badalloc, если памяти не достаточно.
В таких случаях, необходимо использовать оператор new с std::nothrow.
#include <memory>
std::unique_ptr<T> p = new(std::nothrow) T();
Функции _std::makeshared() и _std::makeunique() более эффективны и могут предотвратить двойное выделения памяти.
Предлагается добавить _std::make_uniquenothrow() и _std::make_sharednothrow() функции, которые можно реализовано следующим образом.
Использование _std::makeunique() и _std::makeshared() может привести к киданию исключение _std::badalloc, если памяти не достаточно. В таких случаях, необходимо использовать оператор new с std::nothrow.
Функции _std::makeshared() и _std::makeunique() более эффективны и могут предотвратить двойное выделения памяти. Предлагается добавить _std::make_uniquenothrow() и _std::make_sharednothrow() функции, которые можно реализовано следующим образом.
В библиотеке boost уже реализована подобные функции https://www.boost.org/doc/libs/1_63_0/boost/move/make_unique.hpp