mirror of
https://github.com/boostorg/smart_ptr.git
synced 2026-01-26 19:12:09 +00:00
185 lines
6.4 KiB
HTML
185 lines
6.4 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<title>make_unique</title>
|
|
</head>
|
|
<body>
|
|
<h1>make_unique</h1>
|
|
<div id="navigation">
|
|
<ul>
|
|
<li><a href="#introduction">Introduction</a></li>
|
|
<li><a href="#synopsis">Synopsis</a></li>
|
|
<li><a href="#requirements">Common Requirements</a></li>
|
|
<li><a href="#functions">Free Functions</a></li>
|
|
<li><a href="#history">History</a></li>
|
|
</ul>
|
|
</div>
|
|
<div id="introduction">
|
|
<h2>Introduction</h2>
|
|
<p>
|
|
The header file <boost/make_unique.hpp> provides overloads of
|
|
function template <code>make_unique</code> for convenient creation of
|
|
<code>std::unique_ptr</code> objects.
|
|
</p>
|
|
</div>
|
|
<div id="synopsis">
|
|
<h2>Synopsis</h2>
|
|
<div>
|
|
<h3>Header <boost/smart_ptr/make_unique.hpp></h3>
|
|
<code>namespace boost {</code>
|
|
<blockquote>
|
|
<code>template<class T><br>std::unique_ptr<T>
|
|
<a href="#functions">make_unique</a>();</code>
|
|
</blockquote>
|
|
<blockquote>
|
|
<code>template<class T, class... Args><br>std::unique_ptr<T>
|
|
<a href="#functions">make_unique</a>(Args&&... args);</code>
|
|
</blockquote>
|
|
<blockquote>
|
|
<code>template<class T><br>std::unique_ptr<T>
|
|
<a href="#functions">make_unique</a>(<em>T</em>&& value);</code>
|
|
</blockquote>
|
|
<blockquote>
|
|
<code>template<class T><br>std::unique_ptr<T>
|
|
<a href="#functions">make_unique</a>(std::size_t size);</code>
|
|
</blockquote>
|
|
<blockquote>
|
|
<code>template<class T><br>std::unique_ptr<T>
|
|
<a href="#functions">make_unique_noinit</a>();</code>
|
|
</blockquote>
|
|
<blockquote>
|
|
<code>template<class T><br>std::unique_ptr<T>
|
|
<a href="#functions">make_unique_noinit</a>(std::size_t size);</code>
|
|
</blockquote>
|
|
<code>}</code>
|
|
</div>
|
|
</div>
|
|
<div id="requirements">
|
|
<h2>Common Requirements</h2>
|
|
<h3><code>template<class T, <em>Args</em>><br>
|
|
std::unique_ptr<T> make_unique(<em>args</em>);</code></h3>
|
|
<dl>
|
|
<dt><strong>Effects:</strong></dt>
|
|
<dd>Allocates storage for an object of type <code>T</code> (or
|
|
<code>E[size]</code> when <code>T</code> is <code>E[]</code>, where
|
|
<code>size</code> is determined from <code>args</code> as specified by
|
|
the concrete overload). The storage is initialized from
|
|
<code>args</code> as specified by the concrete overload. If an exception
|
|
is thrown, the functions have no effect.</dd>
|
|
<dt><strong>Returns:</strong></dt>
|
|
<dd>A <code>std::unique_ptr</code> instance that stores and owns the
|
|
address of the newly allocated and constructed object.</dd>
|
|
<dt><strong>Postconditions:</strong></dt>
|
|
<dd><code>r.get() != 0</code>, where <code>r</code> is the return
|
|
value.</dd>
|
|
<dt><strong>Throws:</strong></dt>
|
|
<dd><code>std::bad_alloc</code>, or an exception thrown from the
|
|
initialization of the object.</dd>
|
|
<dt><strong>Remarks:</strong></dt>
|
|
<dd>
|
|
<ul>
|
|
<li>When an object of a scalar type T is specified to be initialized to
|
|
a value <code>value</code>, or to <code>T(args...)</code>, where
|
|
<code>args...</code> is a list of constructor arguments,
|
|
<code>make_unique</code> shall perform this initialization via the
|
|
expression <code>new T(value)</code> or <code>new T(args...)</code>
|
|
respectively.</li>
|
|
<li>When an object of type <code>T</code> is specified to be
|
|
value-initialized, <code>make_unique</code> shall perform this
|
|
initialization via the expression <code>new T()</code>.</li>
|
|
<li>When an object of type <code>T</code> is specified to be
|
|
default-initialized, <code>make_unique_noinit</code> shall perform this
|
|
initialization via the expression <code>new T</code>.</li>
|
|
</ul>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
<div id="functions">
|
|
<h2>Free functions</h2>
|
|
<div>
|
|
<h3><code>template<class T, class... Args><br>
|
|
std::unique_ptr<T>
|
|
make_unique(Args&&... args);</code></h3>
|
|
<dl>
|
|
<dt><strong>Returns:</strong></dt>
|
|
<dd>A <code>std::unique_ptr</code> to an object of type <code>T</code>,
|
|
initialized to <code>std::forward<Args>(args)...</code>.</dd>
|
|
<dt><strong>Remarks:</strong></dt>
|
|
<dd>This overload shall only participate in overload resolution when
|
|
<code>T</code> is not an array type.</dd>
|
|
<dt><strong>Example:</strong></dt>
|
|
<dd><code>boost::make_unique<double>(1.0);</code></dd>
|
|
</dl>
|
|
</div>
|
|
<div>
|
|
<h3><code>template<class T><br>std::unique_ptr<T>
|
|
make_unique(<em>T</em>&& value);</code></h3>
|
|
<dl>
|
|
<dt><strong>Returns:</strong></dt>
|
|
<dd>A <code>std::unique_ptr</code> to an object of type <code>T</code>,
|
|
initialized to <code>std::move(value)</code>.</dd>
|
|
<dt><strong>Remarks:</strong></dt>
|
|
<dd>This overload shall only participate in overload resolution when
|
|
<code>T</code> is not an array type.</dd>
|
|
<dt><strong>Example:</strong></dt>
|
|
<dd><code>boost::make_unique<point>({1.0, -1.0});</code></dd></dl>
|
|
</div>
|
|
<div>
|
|
<h3><code>template<class T><br>std::unique_ptr<T>
|
|
make_unique(std::size_t size);</code></h3>
|
|
<dl>
|
|
<dt><strong>Returns:</strong></dt>
|
|
<dd>A <code>std::unique_ptr</code> to a value-initialized object of type
|
|
<code>E[size]</code>.</dd>
|
|
<dt><strong>Remarks:</strong></dt>
|
|
<dd>This overload shall only participate in overload resolution when
|
|
<code>T</code> is of the form <code>E[]</code>.</dd>
|
|
<dt><strong>Example:</strong></dt>
|
|
<dd><code>boost::make_unique<int[]>(8);</code></dd>
|
|
</dl>
|
|
</div>
|
|
<div>
|
|
<h3><code>template<class T><br>std::unique_ptr<T>
|
|
make_unique_noinit();</code></h3>
|
|
<dl>
|
|
<dt><strong>Returns:</strong></dt>
|
|
<dd>A <code>std::unique_ptr</code> to a default-initialized object of
|
|
type <code>T</code>.</dd>
|
|
<dt><strong>Remarks:</strong></dt>
|
|
<dd>This overload shall only participate in overload resolution when
|
|
<code>T</code> is not an array type.</dd>
|
|
<dt><strong>Example:</strong></dt>
|
|
<dd><code>boost::make_unique_noinit<std::tm>();</code></dd>
|
|
</dl>
|
|
</div>
|
|
<div>
|
|
<h3><code>template<class T><br>std::unique_ptr<T>
|
|
make_unique_noinit(std::size_t size);</code></h3>
|
|
<dl>
|
|
<dt><strong>Returns:</strong></dt>
|
|
<dd>A <code>std::unique_ptr</code> to a default-initialized object of
|
|
type <code>E[size]</code>.</dd>
|
|
<dt><strong>Remarks:</strong></dt>
|
|
<dd>This overload shall only participate in overload resolution when
|
|
<code>T</code> is of the form <code>E[]</code>.</dd>
|
|
<dt><strong>Example:</strong></dt>
|
|
<dd><code>boost::make_unique_noinit<char[]>(64);</code></dd>
|
|
</dl>
|
|
</div>
|
|
</div>
|
|
<div id="history">
|
|
<h2>History</h2>
|
|
<dl>
|
|
<dt><strong>Boost 1.56</strong></dt>
|
|
<dd>Glen Fernandes contributed implementations of make_unique for
|
|
scalars and arrays</dd>
|
|
</dl>
|
|
</div>
|
|
<hr>
|
|
Copyright 2012-2014 Glen Fernandes. Distributed under the
|
|
<a href="http://www.boost.org/LICENSE_1_0.txt">Boost Software License,
|
|
Version 1.0</a>.
|
|
</body>
|
|
</html>
|