Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

make_unique

Introduction

The header file <boost/make_unique.hpp> provides overloads of function template make_unique for convenient creation of std::unique_ptr objects.

Synopsis

Header <boost/smart_ptr/make_unique.hpp>

namespace boost {
template<class T>
std::unique_ptr<T> make_unique();
template<class T, class... Args>
std::unique_ptr<T> make_unique(Args&&... args);
template<class T>
std::unique_ptr<T> make_unique(T&& value);
template<class T>
std::unique_ptr<T> make_unique(std::size_t size);
template<class T>
std::unique_ptr<T> make_unique_noinit();
template<class T>
std::unique_ptr<T> make_unique_noinit(std::size_t size);
}

Common Requirements

template<class T, Args>
std::unique_ptr<T> make_unique(args);

Effects:
Allocates storage for an object of type T (or E[size] when T is E[], where size is determined from args as specified by the concrete overload). The storage is initialized from args as specified by the concrete overload. If an exception is thrown, the functions have no effect.
Returns:
A std::unique_ptr instance that stores and owns the address of the newly allocated and constructed object.
Postconditions:
r.get() != 0, where r is the return value.
Throws:
std::bad_alloc, or an exception thrown from the initialization of the object.
Remarks:
  • When an object of a scalar type T is specified to be initialized to a value value, or to T(args...), where args... is a list of constructor arguments, make_unique shall perform this initialization via the expression new T(value) or new T(args...) respectively.
  • When an object of type T is specified to be value-initialized, make_unique shall perform this initialization via the expression new T().
  • When an object of type T is specified to be default-initialized, make_unique_noinit shall perform this initialization via the expression new T.

Free functions

template<class T, class... Args>
std::unique_ptr<T> make_unique(Args&&... args);

Returns:
A std::unique_ptr to an object of type T, initialized to std::forward<Args>(args)....
Remarks:
This overload shall only participate in overload resolution when T is not an array type.
Example:
boost::make_unique<double>(1.0);

template<class T>
std::unique_ptr<T> make_unique(T&& value);

Returns:
A std::unique_ptr to an object of type T, initialized to std::move(value).
Remarks:
This overload shall only participate in overload resolution when T is not an array type.
Example:
boost::make_unique<point>({1.0, -1.0});

template<class T>
std::unique_ptr<T> make_unique(std::size_t size);

Returns:
A std::unique_ptr to a value-initialized object of type E[size].
Remarks:
This overload shall only participate in overload resolution when T is of the form E[].
Example:
boost::make_unique<int[]>(8);

template<class T>
std::unique_ptr<T> make_unique_noinit();

Returns:
A std::unique_ptr to a default-initialized object of type T.
Remarks:
This overload shall only participate in overload resolution when T is not an array type.
Example:
boost::make_unique_noinit<std::tm>();

template<class T>
std::unique_ptr<T> make_unique_noinit(std::size_t size);

Returns:
A std::unique_ptr to a default-initialized object of type E[size].
Remarks:
This overload shall only participate in overload resolution when T is of the form E[].
Example:
boost::make_unique_noinit<char[]>(64);

History

Boost 1.56
Glen Fernandes contributed implementations of make_unique for scalars and arrays

Copyright 2012-2014 Glen Fernandes. Distributed under the Boost Software License, Version 1.0.