namespace boost {
template<class U> // U is not array
unique_ptr<U> make_unique();
#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
template<class U, class... Args> // U is not array
unique_ptr<U> make_unique(Args&&... args);
#endif
template<class U> // U is not array
unique_ptr<U> make_unique(U&& value);
template<class U> // U is T[]
unique_ptr<U> make_unique(size_t size);
template<class U> // U is not array
unique_ptr<U> make_unique_noinit();
template<class U> // U is T[]
unique_ptr<U> make_unique_noinit(size_t size);
}
Эффекты:Выделяет память для объекта типа<U>(или<T[size]>, когда<U>является<T[]>, где<size>определяется из<args>, как указано конкретной перегрузкой). Объект инициализируется из<args>, как указано бетонной перегрузкой. Если бросается исключение, функции не имеют эффекта.
Возвращение:Пример<unique_ptr>, который хранит и владеет адресом вновь построенного объекта.
Броски:<bad_alloc>или исключение, выброшенное из инициализации объекта.
Замечания:
Если объект немассивного типа<T>указан для инициализации до значения<value>или до<T(list...)>, где<list...>представляет собой список аргументов конструктора,<make_unique>должен выполнить эту инициализацию посредством выражения<new T(value)>или<new T(list...)>соответственно.
Если объект типа<T>определен как инициализированный по значению,<make_unique>должен выполнить эту инициализацию посредством выражения<new T()>.
Если указан объект типа<T>, подлежащий инициализации по умолчанию,<make_unique_noinit>должен выполнить эту инициализацию посредством выражения<new T>.
Статья make_unique раздела может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.