]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/smart_ptr/make_unique.html
bump version to 12.2.2-pve1
[ceph.git] / ceph / src / boost / libs / smart_ptr / make_unique.html
1 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2 <html>
3 <head>
4 <title>make_unique</title>
5 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
6 </head>
7 <body text="#000000" bgcolor="#ffffff" link="#0000ff" vlink="#0000ff">
8 <h1><img height="86" alt="boost.png (6897 bytes)" src="../../boost.png"
9 width="277" align="middle" border="0">make_unique</h1>
10 <p><a href="#introduction">Introduction</a><br>
11 <a href="#synopsis">Synopsis</a><br>
12 <a href="#common">Common Requirements</a><br>
13 <a href="#functions">Free Functions</a><br>
14 <a href="#history">History</a></p>
15 <h2><a name="introduction">Introduction</a></h2>
16 <p>The header file &lt;boost/make_unique.hpp&gt; provides overloaded
17 function template <code>make_unique</code> for convenient creation of
18 <code>unique_ptr</code> objects.</p>
19 <h2><a name="synopsis">Synopsis</a></h2>
20 <pre>namespace boost {
21 template&lt;class U&gt; // U is not array
22 unique_ptr&lt;U&gt; <a href="#functions">make_unique</a>();
23
24 #if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
25 template&lt;class U, class... Args&gt; // U is not array
26 unique_ptr&lt;U&gt; <a href="#functions">make_unique</a>(Args&amp;&amp;... args);
27 #endif
28
29 template&lt;class U&gt; // U is not array
30 unique_ptr&lt;U&gt; <a href="#functions">make_unique</a>(U&amp;&amp; value);
31
32 template&lt;class U&gt; // U is T[]
33 unique_ptr&lt;U&gt; <a href="#functions">make_unique</a>(size_t size);
34
35 template&lt;class U&gt; // U is not array
36 unique_ptr&lt;U&gt; <a href="#functions">make_unique_noinit</a>();
37
38 template&lt;class U&gt; // U is T[]
39 unique_ptr&lt;U&gt; <a href="#functions">make_unique_noinit</a>(size_t size);
40 }</pre>
41 <h2><a name="common">Common Requirements</a></h2>
42 <pre>template&lt;class U&gt;
43 unique_ptr&lt;U&gt; make_unique(<em>args</em>);
44 template&lt;class U&gt;
45 unique_ptr&lt;U&gt; make_unique_noinit(<em>args</em>);</pre>
46 <blockquote>
47 <p><b>Effects:</b> Allocates memory for an object of type <code>U</code>
48 (or <code>T[size]</code> when <code>U</code> is <code>T[]</code>,
49 where <code>size</code> is determined from <code>args</code> as
50 specified by the concrete overload). The object is initialized from
51 <code>args</code> as specified by the concrete overload. If an
52 exception is thrown, the functions have no effect.</p>
53 <p><b>Returns:</b> A <code>unique_ptr</code> instance that stores and
54 owns the address of the newly constructed object.</p>
55 <p><b>Postconditions:</b> <code>r.get() != 0</code>, where
56 <code>r</code> is the return value.</p>
57 <p><b>Throws:</b> <code>bad_alloc</code>, or an exception thrown from
58 the initialization of the object.</p>
59 <p><b>Remarks:</b></p>
60 <blockquote>
61 <p>When an object of a non-array type <code>T</code> is specified to
62 be initialized to a value <code>value</code>, or to
63 <code>T(list...)</code>, where <code>list...</code> is a list of
64 constructor arguments, <code>make_unique</code> shall perform this
65 initialization via the expression <code>new T(value)</code> or
66 <code>new T(list...)</code> respectively.</p>
67 <p>When an object of type <code>T</code> is specified to be
68 value-initialized, <code>make_unique</code> shall perform this
69 initialization via the expression <code>new T()</code>.</p>
70 <p>When an object of type <code>T</code> is specified to be
71 default-initialized, <code>make_unique_noinit</code> shall perform
72 this initialization via the expression <code>new T</code>.</p>
73 </blockquote>
74 </blockquote>
75 <h2><a name="functions">Free Functions</a></h2>
76 <pre>template&lt;class U, class... Args&gt;
77 unique_ptr&lt;U&gt; make_unique(Args&amp;&amp;... args);</pre>
78 <blockquote>
79 <p><b>Returns:</b> A unique_ptr to an object of type <code>U</code>,
80 initialized to <code>U(forward&lt;Args&gt;(args)...)</code>.</p>
81 <p><b>Remarks:</b> This overload shall only participate in overload
82 resolution when <code>U</code> is not an array type.</p>
83 <p><b>Examples:</b></p>
84 <blockquote>
85 <pre>unique_ptr&lt;float&gt; p1 = boost::make_unique&lt;float&gt;();
86 unique_ptr&lt;point&gt; p2 = boost::make_unique&lt;point&gt;(x, y);</pre>
87 </blockquote>
88 </blockquote>
89 <pre>template&lt;class U&gt;
90 unique_ptr&lt;U&gt; make_unique(U&amp;&amp; value);</pre>
91 <blockquote>
92 <p><b>Returns:</b> A unique_ptr to an object of type <code>U</code>,
93 initialized to <code>move(value)</code>.</p>
94 <p><b>Remarks:</b> This overload shall only participate in overload
95 resolution when <code>U</code> is not an array type.</p>
96 <p><b>Examples:</b></p>
97 <blockquote>
98 <pre>unique_ptr&lt;string&gt; p1 = boost::make_unique&lt;string&gt;({'a', 'b'});
99 unique_ptr&lt;point&gt; p2 = boost::make_unique&lt;point&gt;({-10, 25});</pre>
100 </blockquote>
101 </blockquote>
102 <pre>template&lt;class U&gt;
103 unique_ptr&lt;U&gt; make_unique(size_t size);</pre>
104 <blockquote>
105 <p><b>Returns:</b> A unique_ptr to a value-initialized object of type
106 <code>T[size]</code>.</p>
107 <p><b>Remarks:</b> This overload shall only participate in overload
108 resolution when <code>U</code> is of the form <code>T[]</code>.</p>
109 <p><b>Examples:</b></p>
110 <blockquote>
111 <pre>unique_ptr&lt;double[]&gt; p1 = boost::make_unique&lt;double[]&gt;(4);
112 unique_ptr&lt;int[][2]&gt; p2 = boost::make_unique&lt;int[][2]&gt;(2);</pre>
113 </blockquote>
114 </blockquote>
115 <pre>template&lt;class U&gt;
116 unique_ptr&lt;U&gt; make_unique_noinit();</pre>
117 <blockquote>
118 <p><b>Returns:</b> A unique_ptr to a default-initialized object of
119 type <code>U</code>.</p>
120 <p><b>Remarks:</b> This overload shall only participate in overload
121 resolution when <code>U</code> is not an array type.</p>
122 <p><b>Examples:</b></p>
123 <blockquote>
124 <pre>unique_ptr&lt;float&gt; p1 = boost::make_unique_noinit&lt;float&gt;();
125 unique_ptr&lt;point&gt; p2 = boost::make_unique_noinit&lt;point&gt;();</pre>
126 </blockquote>
127 </blockquote>
128 <pre>template&lt;class U&gt;
129 unique_ptr&lt;U&gt; make_unique_noinit(size_t size);</pre>
130 <blockquote>
131 <p><b>Returns:</b> A unique_ptr to a default-initialized object of
132 type <code>T[size]</code>.</p>
133 <p><b>Remarks:</b> This overload shall only participate in overload
134 resolution when <code>U</code> is of the form <code>T[]</code>.</p>
135 <p><b>Examples:</b></p>
136 <blockquote>
137 <pre>unique_ptr&lt;double[]&gt; p1 = boost::make_unique_noinit&lt;double[]&gt;(4);
138 unique_ptr&lt;int[][2]&gt; p2 = boost::make_unique_noinit&lt;int[][2]&gt;(2);</pre>
139 </blockquote>
140 </blockquote>
141 <h2><a name="history">History</a></h2>
142 <p>January 2014. Glen Fernandes contributed implementations of
143 make_unique for objects and arrays.</p>
144 <hr>
145 <p>$Date$</p>
146 <p><small>Copyright 2012-2014 Glen Fernandes. Distributed under the
147 Boost Software License, Version 1.0. See accompanying file
148 <a href="../../LICENSE_1_0.txt">LICENSE_1_0.txt</a> or copy at
149 <a href="http://www.boost.org/LICENSE_1_0.txt">
150 http://www.boost.org/LICENSE_1_0.txt</a>.</small></p>
151 </body>
152 </html>