Files
smart_ptr/make_unique.html
2017-03-10 11:55:06 -05:00

177 lines
5.9 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 &lt;boost/make_unique.hpp&gt; 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 &lt;boost/smart_ptr/make_unique.hpp&gt;</h3>
<code>namespace boost {</code>
<blockquote>
<code>template&lt;class T&gt;<br>std::unique_ptr&lt;T&gt;
<a href="#functions">make_unique</a>();</code>
</blockquote>
<blockquote>
<code>template&lt;class T, class... Args&gt;<br>std::unique_ptr&lt;T&gt;
<a href="#functions">make_unique</a>(Args&amp;&amp;... args);</code>
</blockquote>
<blockquote>
<code>template&lt;class T&gt;<br>std::unique_ptr&lt;T&gt;
<a href="#functions">make_unique</a>(<em>T</em>&amp;&amp; value);</code>
</blockquote>
<blockquote>
<code>template&lt;class T&gt;<br>std::unique_ptr&lt;T&gt;
<a href="#functions">make_unique</a>(std::size_t size);</code>
</blockquote>
<blockquote>
<code>template&lt;class T&gt;<br>std::unique_ptr&lt;T&gt;
<a href="#functions">make_unique_noinit</a>();</code>
</blockquote>
<blockquote>
<code>template&lt;class T&gt;<br>std::unique_ptr&lt;T&gt;
<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&lt;class T, <em>Args</em>&gt;<br>
std::unique_ptr&lt;T&gt;
<a href="#functions">make_unique</a>(<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&lt;class T, class... Args&gt;<br>
std::unique_ptr&lt;T&gt;
make_unique(Args&amp;&amp;... 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&lt;Args&gt;(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>
</dl>
</div>
<div>
<h3><code>template&lt;class T&gt;<br>std::unique_ptr&lt;T&gt;
make_unique(<em>T</em>&amp;&amp; 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>
</dl>
</div>
<div>
<h3><code>template&lt;class T&gt;<br>std::unique_ptr&lt;T&gt;
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>
</dl>
</div>
<div>
<h3><code>template&lt;class T&gt;<br>std::unique_ptr&lt;T&gt;
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>
</dl>
</div>
<div>
<h3><code>template&lt;class T&gt;<br>std::unique_ptr&lt;T&gt;
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>
</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>