• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1<html>
2<head>
3<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
4<title>default_allocator</title>
5<link rel="stylesheet" href="../../../../../doc/src/boostbook.css" type="text/css">
6<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
7<link rel="home" href="../index.html" title="Chapter 1. Boost.Core">
8<link rel="up" href="../index.html" title="Chapter 1. Boost.Core">
9<link rel="prev" href="checked_delete.html" title="checked_delete">
10<link rel="next" href="demangle.html" title="demangle">
11</head>
12<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
13<table cellpadding="2" width="100%"><tr>
14<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></td>
15<td align="center"><a href="../../../../../index.html">Home</a></td>
16<td align="center"><a href="../../../../../libs/libraries.htm">Libraries</a></td>
17<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
18<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
19<td align="center"><a href="../../../../../more/index.htm">More</a></td>
20</tr></table>
21<hr>
22<div class="spirit-nav">
23<a accesskey="p" href="checked_delete.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="demangle.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>
24</div>
25<div class="section">
26<div class="titlepage"><div><div><h2 class="title" style="clear: both">
27<a name="core.default_allocator"></a><a class="link" href="default_allocator.html" title="default_allocator">default_allocator</a>
28</h2></div></div></div>
29<div class="toc"><dl class="toc">
30<dt><span class="section"><a href="default_allocator.html#core.default_allocator.overview">Overview</a></span></dt>
31<dt><span class="section"><a href="default_allocator.html#core.default_allocator.examples">Examples</a></span></dt>
32<dt><span class="section"><a href="default_allocator.html#core.default_allocator.reference">Reference</a></span></dt>
33</dl></div>
34<div class="simplesect">
35<div class="titlepage"><div><div><h3 class="title">
36<a name="idm45312830116432"></a>Authors</h3></div></div></div>
37<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
38          Glen Fernandes
39        </li></ul></div>
40</div>
41<div class="section">
42<div class="titlepage"><div><div><h3 class="title">
43<a name="core.default_allocator.overview"></a><a class="link" href="default_allocator.html#core.default_allocator.overview" title="Overview">Overview</a>
44</h3></div></div></div>
45<p>
46        The header &lt;boost/core/default_allocator.hpp&gt; provides the class template
47        <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">default_allocator</span></code> to serve as a minimal
48        default allocator that:
49      </p>
50<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
51<li class="listitem">
52            Like C++2a's <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">allocator</span></code>, does not provide members
53            such as <code class="computeroutput"><span class="identifier">construct</span><span class="special">()</span></code>
54            and <code class="computeroutput"><span class="identifier">destroy</span><span class="special">()</span></code>
55            to be eligible for optimizations by allocator-aware code that detects
56            the absence of these members to provide more optimal construction.
57          </li>
58<li class="listitem">
59            Supports <code class="computeroutput"><span class="identifier">BOOST_NO_EXCEPTIONS</span></code>
60            in allocation.
61          </li>
62<li class="listitem">
63            Does not have <code class="computeroutput"><span class="identifier">std</span></code> as
64            an associated namespace.
65          </li>
66</ul></div>
67</div>
68<div class="section">
69<div class="titlepage"><div><div><h3 class="title">
70<a name="core.default_allocator.examples"></a><a class="link" href="default_allocator.html#core.default_allocator.examples" title="Examples">Examples</a>
71</h3></div></div></div>
72<p>
73        The following snippet shows the use of this allocator as the default allocator
74        for a container.
75      </p>
76<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Key</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Compare</span> <span class="special">=</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">less</span><span class="special">&lt;</span><span class="identifier">Key</span><span class="special">&gt;,</span>
77    <span class="keyword">class</span> <span class="identifier">Allocator</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">default_allocator</span><span class="special">&lt;</span><span class="identifier">Key</span><span class="special">&gt;</span> <span class="special">&gt;</span>
78<span class="keyword">class</span> <span class="identifier">FlatSet</span><span class="special">;</span>
79</pre>
80<p>
81        Facilities like <code class="computeroutput"><span class="identifier">make_shared</span></code>
82        can be implemented using <code class="computeroutput"><span class="identifier">allocate_shared</span></code>
83        with <code class="computeroutput"><span class="identifier">default_allocator</span></code>.
84      </p>
85<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">,</span> <span class="keyword">class</span><span class="special">...</span> <span class="identifier">Args</span><span class="special">&gt;</span>
86<span class="identifier">enable_if_t</span><span class="special">&lt;!</span><span class="identifier">is_array_v</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;,</span> <span class="identifier">shared_ptr</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="special">&gt;</span>
87<span class="identifier">make_shared</span><span class="special">(</span><span class="identifier">Args</span><span class="special">&amp;&amp;...</span> <span class="identifier">args</span><span class="special">)</span>
88<span class="special">{</span>
89    <span class="keyword">return</span> <span class="identifier">allocate_shared</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">default_allocator</span><span class="special">&lt;</span><span class="identifier">remove_cv_t</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="special">&gt;(),</span>
90        <span class="identifier">std</span><span class="special">::</span><span class="identifier">forward</span><span class="special">&lt;</span><span class="identifier">Args</span><span class="special">&gt;(</span><span class="identifier">args</span><span class="special">)...);</span>
91<span class="special">}</span>
92</pre>
93</div>
94<div class="section">
95<div class="titlepage"><div><div><h3 class="title">
96<a name="core.default_allocator.reference"></a><a class="link" href="default_allocator.html#core.default_allocator.reference" title="Reference">Reference</a>
97</h3></div></div></div>
98<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
99
100<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">&gt;</span>
101<span class="keyword">struct</span> <span class="identifier">default_allocator</span> <span class="special">{</span>
102    <span class="keyword">typedef</span> <span class="identifier">T</span> <span class="identifier">value_type</span><span class="special">;</span>
103    <span class="keyword">typedef</span> <span class="identifier">T</span><span class="special">*</span> <span class="identifier">pointer</span><span class="special">;</span>
104    <span class="keyword">typedef</span> <span class="keyword">const</span> <span class="identifier">T</span><span class="special">*</span> <span class="identifier">const_pointer</span><span class="special">;</span>
105    <span class="keyword">typedef</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">add_lvalue_reference_t</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="identifier">reference</span><span class="special">;</span>
106    <span class="keyword">typedef</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">add_lvalue_reference_t</span><span class="special">&lt;</span><span class="keyword">const</span> <span class="identifier">T</span><span class="special">&gt;</span> <span class="identifier">const_reference</span><span class="special">;</span>
107    <span class="keyword">typedef</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">size_type</span><span class="special">;</span>
108    <span class="keyword">typedef</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">ptrdiff_t</span> <span class="identifier">difference_type</span><span class="special">;</span>
109    <span class="keyword">typedef</span> <span class="emphasis"><em>true_type</em></span> <span class="identifier">propagate_on_container_move_assignment</span><span class="special">;</span>
110    <span class="keyword">typedef</span> <span class="emphasis"><em>true_type</em></span> <span class="identifier">is_always_equal</span><span class="special">;</span>
111
112    <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">U</span><span class="special">&gt;</span>
113    <span class="keyword">struct</span> <span class="identifier">rebind</span> <span class="special">{</span>
114        <span class="keyword">typedef</span> <span class="identifier">default_allocator</span><span class="special">&lt;</span><span class="identifier">U</span><span class="special">&gt;</span> <span class="identifier">other</span><span class="special">;</span>
115    <span class="special">};</span>
116
117    <span class="keyword">constexpr</span> <span class="identifier">default_allocator</span><span class="special">()</span> <span class="special">=</span> <span class="keyword">default</span><span class="special">;</span>
118
119    <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">U</span><span class="special">&gt;</span>
120    <span class="keyword">constexpr</span> <span class="identifier">default_allocator</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">default_allocator</span><span class="special">&lt;</span><span class="identifier">U</span><span class="special">&gt;&amp;)</span> <span class="keyword">noexcept</span> <span class="special">{</span> <span class="special">}</span>
121
122    <span class="keyword">constexpr</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">max_size</span><span class="special">()</span> <span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span>
123    <span class="identifier">T</span><span class="special">*</span> <span class="identifier">allocate</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">n</span><span class="special">);</span>
124    <span class="keyword">void</span> <span class="identifier">deallocate</span><span class="special">(</span><span class="identifier">T</span><span class="special">*</span> <span class="identifier">p</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span><span class="special">);</span>
125<span class="special">};</span>
126
127<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">U</span><span class="special">&gt;</span>
128<span class="keyword">constexpr</span> <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">==(</span><span class="keyword">const</span> <span class="identifier">default_allocator</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;&amp;,</span>
129    <span class="keyword">const</span> <span class="identifier">default_allocator</span><span class="special">&lt;</span><span class="identifier">U</span><span class="special">&gt;&amp;)</span> <span class="keyword">noexcept</span><span class="special">;</span>
130
131<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">U</span><span class="special">&gt;</span>
132<span class="keyword">constexpr</span> <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">!=(</span><span class="keyword">const</span> <span class="identifier">default_allocator</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;&amp;,</span>
133    <span class="keyword">const</span> <span class="identifier">default_allocator</span><span class="special">&lt;</span><span class="identifier">U</span><span class="special">&gt;&amp;)</span> <span class="keyword">noexcept</span><span class="special">;</span>
134
135<span class="special">}</span> <span class="comment">/* boost */</span>
136</pre>
137<div class="section">
138<div class="titlepage"><div><div><h4 class="title">
139<a name="core.default_allocator.reference.members"></a><a class="link" href="default_allocator.html#core.default_allocator.reference.members" title="Members">Members</a>
140</h4></div></div></div>
141<div class="variablelist">
142<p class="title"><b></b></p>
143<dl class="variablelist">
144<dt><span class="term"><code class="computeroutput"><span class="keyword">constexpr</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span>
145            <span class="identifier">max_size</span><span class="special">()</span>
146            <span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span></code></span></dt>
147<dd><div class="variablelist">
148<p class="title"><b></b></p>
149<dl class="variablelist">
150<dt><span class="term">Returns</span></dt>
151<dd><p>
152                      The largest value <code class="computeroutput"><span class="identifier">N</span></code>
153                      for which the call <code class="computeroutput"><span class="identifier">allocate</span><span class="special">(</span><span class="identifier">N</span><span class="special">)</span></code> might succeed.
154                    </p></dd>
155</dl>
156</div></dd>
157<dt><span class="term"><code class="computeroutput"><span class="identifier">T</span><span class="special">*</span>
158            <span class="identifier">allocate</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">n</span><span class="special">);</span></code></span></dt>
159<dd><div class="variablelist">
160<p class="title"><b></b></p>
161<dl class="variablelist">
162<dt><span class="term">Returns</span></dt>
163<dd><p>
164                      A pointer to the initial element of an array of storage of
165                      size <code class="computeroutput"><span class="identifier">n</span> <span class="special">*</span>
166                      <span class="keyword">sizeof</span><span class="special">(</span><span class="identifier">T</span><span class="special">)</span></code>,
167                      aligned appropriately for objects of type <code class="computeroutput"><span class="identifier">T</span></code>.
168                    </p></dd>
169<dt><span class="term">Remarks</span></dt>
170<dd><p>
171                      The storage is obtained by calling <code class="computeroutput"><span class="special">::</span><span class="keyword">operator</span> <span class="keyword">new</span></code>.
172                    </p></dd>
173<dt><span class="term">Throws</span></dt>
174<dd><p>
175                      <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">bad_alloc</span></code> if the storage
176                      cannot be obtained.
177                    </p></dd>
178</dl>
179</div></dd>
180<dt><span class="term"><code class="computeroutput"><span class="keyword">void</span> <span class="identifier">deallocate</span><span class="special">(</span><span class="identifier">T</span><span class="special">*</span> <span class="identifier">p</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span>
181            <span class="identifier">n</span><span class="special">);</span></code></span></dt>
182<dd><div class="variablelist">
183<p class="title"><b></b></p>
184<dl class="variablelist">
185<dt><span class="term">Requires</span></dt>
186<dd><p>
187                      <code class="computeroutput"><span class="identifier">p</span></code> shall be
188                      a pointer value obtained from <code class="computeroutput"><span class="identifier">allocate</span><span class="special">()</span></code>. <code class="computeroutput"><span class="identifier">n</span></code>
189                      shall equal the value passed as the first argument to the invocation
190                      of <code class="computeroutput"><span class="identifier">allocate</span></code>
191                      which returned <code class="computeroutput"><span class="identifier">p</span></code>.
192                    </p></dd>
193<dt><span class="term">Effects</span></dt>
194<dd><p>
195                      Deallocates the storage referenced by <code class="computeroutput"><span class="identifier">p</span></code>.
196                    </p></dd>
197<dt><span class="term">Remarks</span></dt>
198<dd><p>
199                      Uses <code class="computeroutput"><span class="special">::</span><span class="keyword">operator</span>
200                      <span class="keyword">delete</span></code>.
201                    </p></dd>
202</dl>
203</div></dd>
204</dl>
205</div>
206</div>
207<div class="section">
208<div class="titlepage"><div><div><h4 class="title">
209<a name="core.default_allocator.reference.operators"></a><a class="link" href="default_allocator.html#core.default_allocator.reference.operators" title="Operators">Operators</a>
210</h4></div></div></div>
211<div class="variablelist">
212<p class="title"><b></b></p>
213<dl class="variablelist">
214<dt><span class="term"><code class="computeroutput"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">U</span><span class="special">&gt;</span> <span class="keyword">constexpr</span> <span class="keyword">bool</span>
215            <span class="keyword">operator</span><span class="special">==(</span><span class="keyword">const</span> <span class="identifier">default_allocator</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;&amp;,</span> <span class="keyword">const</span>
216            <span class="identifier">default_allocator</span><span class="special">&lt;</span><span class="identifier">U</span><span class="special">&gt;&amp;)</span>
217            <span class="keyword">noexcept</span><span class="special">;</span></code></span></dt>
218<dd><div class="variablelist">
219<p class="title"><b></b></p>
220<dl class="variablelist">
221<dt><span class="term">Returns</span></dt>
222<dd><p>
223                      <code class="computeroutput"><span class="keyword">true</span></code>.
224                    </p></dd>
225</dl>
226</div></dd>
227<dt><span class="term"><code class="computeroutput"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">U</span><span class="special">&gt;</span> <span class="keyword">constexpr</span> <span class="keyword">bool</span>
228            <span class="keyword">operator</span><span class="special">!=(</span><span class="keyword">const</span> <span class="identifier">default_allocator</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;&amp;,</span> <span class="keyword">const</span>
229            <span class="identifier">default_allocator</span><span class="special">&lt;</span><span class="identifier">U</span><span class="special">&gt;&amp;)</span>
230            <span class="keyword">noexcept</span><span class="special">;</span></code></span></dt>
231<dd><div class="variablelist">
232<p class="title"><b></b></p>
233<dl class="variablelist">
234<dt><span class="term">Returns</span></dt>
235<dd><p>
236                      <code class="computeroutput"><span class="keyword">false</span></code>.
237                    </p></dd>
238</dl>
239</div></dd>
240</dl>
241</div>
242</div>
243</div>
244</div>
245<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
246<td align="left"></td>
247<td align="right"><div class="copyright-footer">Copyright © 2014 Peter Dimov<br>Copyright © 2014 Glen Fernandes<br>Copyright © 2014 Andrey Semashev<p>
248        Distributed under the <a href="http://boost.org/LICENSE_1_0.txt" target="_top">Boost
249        Software License, Version 1.0</a>.
250      </p>
251</div></td>
252</tr></table>
253<hr>
254<div class="spirit-nav">
255<a accesskey="p" href="checked_delete.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="demangle.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>
256</div>
257</body>
258</html>
259