make_uniqueIntroduction
Synopsis
Common Requirements
Free Functions
History
The header file <boost/make_unique.hpp> provides overloaded
function template make_unique for convenient creation of
unique_ptr objects.
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);
}
template<class U>
unique_ptr<U> make_unique(args);
template<class U>
unique_ptr<U> make_unique_noinit(args);
Effects: Allocates memory for an object of type
U(orT[size]whenUisT[], wheresizeis determined fromargsas specified by the concrete overload). The object is initialized fromargsas specified by the concrete overload. If an exception is thrown, the functions have no effect.Returns: A
unique_ptrinstance that stores and owns the address of the newly constructed object.Postconditions:
r.get() != 0, whereris the return value.Throws:
bad_alloc, or an exception thrown from the initialization of the object.Remarks:
When an object of a non-array type
Tis specified to be initialized to a valuevalue, or toT(list...), wherelist...is a list of constructor arguments,make_uniqueshall perform this initialization via the expressionnew T(value)ornew T(list...)respectively.When an object of type
Tis specified to be value-initialized,make_uniqueshall perform this initialization via the expressionnew T().When an object of type
Tis specified to be default-initialized,make_unique_noinitshall perform this initialization via the expressionnew T.
template<class U, class... Args> unique_ptr<U> make_unique(Args&&... args);
Returns: A unique_ptr to an object of type
U, initialized toU(forward<Args>(args)...).Remarks: This overload shall only participate in overload resolution when
Uis not an array type.Examples:
unique_ptr<float> p1 = boost::make_unique<float>(); unique_ptr<point> p2 = boost::make_unique<point>(x, y);
template<class U> unique_ptr<U> make_unique(U&& value);
Returns: A unique_ptr to an object of type
U, initialized tomove(value).Remarks: This overload shall only participate in overload resolution when
Uis not an array type.Examples:
unique_ptr<string> p1 = boost::make_unique<string>({'a', 'b'}); unique_ptr<point> p2 = boost::make_unique<point>({-10, 25});
template<class U> unique_ptr<U> make_unique(size_t size);
Returns: A unique_ptr to a value-initialized object of type
T[size].Remarks: This overload shall only participate in overload resolution when
Uis of the formT[].Examples:
unique_ptr<double[]> p1 = boost::make_unique<double[]>(4); unique_ptr<int[][2]> p2 = boost::make_unique<int[][2]>(2);
template<class U> unique_ptr<U> make_unique_noinit();
Returns: A unique_ptr to a default-initialized object of type
U.Remarks: This overload shall only participate in overload resolution when
Uis not an array type.Examples:
unique_ptr<float> p1 = boost::make_unique_noinit<float>(); unique_ptr<point> p2 = boost::make_unique_noinit<point>();
template<class U> unique_ptr<U> make_unique_noinit(size_t size);
Returns: A unique_ptr to a default-initialized object of type
T[size].Remarks: This overload shall only participate in overload resolution when
Uis of the formT[].Examples:
unique_ptr<double[]> p1 = boost::make_unique_noinit<double[]>(4); unique_ptr<int[][2]> p2 = boost::make_unique_noinit<int[][2]>(2);
January 2014. Glen Fernandes contributed implementations of make_unique for objects and arrays.
$Date$
Copyright 2012-2014 Glen Fernandes. Distributed under the Boost Software License, Version 1.0. See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.