| <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" |
| "http://www.w3.org/TR/html4/loose.dtd"> |
| |
| <html> |
| <head> |
| <meta http-equiv="Content-Language" content="en-us"> |
| <meta http-equiv="Content-Type" content="text/html; charset=us-ascii"> |
| <link href="../pool.css" rel="stylesheet" type="text/css"> |
| |
| <title>object_pool - Boost Object Pool Allocator</title> |
| </head> |
| |
| <body> |
| <img src="../../../../boost.png" width="276" height="86" alt="C++ Boost"> |
| |
| <h1 align="center">object_pool - Boost Object Pool Allocator</h1> |
| |
| <h2>Introduction</h2> |
| |
| <p>object_pool.hpp provides a template type that can be used for fast and |
| efficient memory allocation. It also provides automatic destruction of |
| non-deallocated objects. For information on other pool-based interfaces, see <a href="../interfaces.html"> |
| the other pool interfaces</a>.</p> |
| |
| <h2>Synopsis</h2> |
| <pre class="code"> |
| template <typename ElementType, typename UserAllocator = default_user_allocator_new_delete> |
| class object_pool |
| { |
| private: |
| object_pool(const object_pool &); |
| void operator=(const object_pool &); |
| |
| public: |
| typedef ElementType element_type; |
| typedef UserAllocator user_allocator; |
| typedef typename pool<UserAllocator>::size_type size_type; |
| typedef typename pool<UserAllocator>::difference_type difference_type; |
| |
| object_pool(); |
| ~object_pool(); |
| |
| element_type * malloc(); |
| void free(element_type * p); |
| bool is_from(element_type * p) const; |
| |
| element_type * construct(); |
| // other construct() functions |
| void destroy(element_type * p); |
| }; |
| </pre> |
| |
| <h2>Template Parameters</h2> |
| |
| <h3>ElementType</h3> |
| |
| <p>The template parameter is the type of object to allocate/deallocate. It |
| must have a non-throwing destructor.</p> |
| |
| <h3>UserAllocator</h3> |
| |
| <p>Defines the method that the underlying Pool will use to allocate memory |
| from the system. See <a href="user_allocator.html">User Allocators</a> for |
| details.</p> |
| |
| <h2>Semantics</h2> |
| |
| <table border align="center" summary=""> |
| <caption> |
| <em>Symbol Table</em> |
| </caption> |
| |
| <tr> |
| <th>Symbol</th> |
| |
| <th>Meaning</th> |
| </tr> |
| |
| <tr> |
| <td class="code">ObjectPool</td> |
| |
| <td><span class="code">object_pool<ElementType, UserAllocator></span></td> |
| </tr> |
| |
| <tr> |
| <td class="code">t</td> |
| |
| <td>value of type <span class="code">ObjectPool</span></td> |
| </tr> |
| |
| <tr> |
| <td class="code">u</td> |
| |
| <td>value of type <span class="code">const ObjectPool</span></td> |
| </tr> |
| |
| <tr> |
| <td class="code">p</td> |
| |
| <td>value of type <span class="code">ElementType *</span></td> |
| </tr> |
| </table><br> |
| |
| <table border align="center" summary=""> |
| <caption> |
| <em>Typedefs</em> |
| </caption> |
| |
| <tr> |
| <th>Expression</th> |
| |
| <th>Type</th> |
| </tr> |
| |
| <tr> |
| <td class="code">ObjectPool::element_type</td> |
| |
| <td class="code">ElementType</td> |
| </tr> |
| |
| <tr> |
| <td class="code">ObjectPool::user_allocator</td> |
| |
| <td class="code">UserAllocator</td> |
| </tr> |
| |
| <tr> |
| <td class="code">ObjectPool::size_type</td> |
| |
| <td class="code">pool<UserAllocator>::size_type</td> |
| </tr> |
| |
| <tr> |
| <td class="code">ObjectPool::difference_type</td> |
| |
| <td class="code">pool<UserAllocator>::difference_type</td> |
| </tr> |
| </table><br> |
| |
| <table border align="center" summary=""> |
| <caption> |
| <em>Constructors, Destructors, and Testing</em> |
| </caption> |
| |
| <tr> |
| <th>Expression</th> |
| |
| <th>Return Type</th> |
| |
| <th>Notes</th> |
| </tr> |
| |
| <tr> |
| <td class="code">ObjectPool()</td> |
| |
| <td>not used</td> |
| |
| <td>Constructs a new empty <span class="code">ObjectPool</span></td> |
| </tr> |
| |
| <tr> |
| <td class="code">(&t)->~ObjectPool()</td> |
| |
| <td>not used</td> |
| |
| <td>Destructs the <span class="code">ObjectPool</span>; <span class= |
| "code">~ElementType()</span> is called for each allocated ElementType |
| that has not been deallocated. O(N).</td> |
| </tr> |
| |
| <tr> |
| <td class="code">u.is_from(p)</td> |
| |
| <td class="code">bool</td> |
| |
| <td>Returns <span class="code">true</span> if <span class= |
| "code">p</span> was allocated from <span class="code">u</span> or may be |
| returned as the result of a future allocation from <span class= |
| "code">u</span>. Returns <span class="code">false</span> if |
| <span class="code">p</span> was allocated from some other pool or may be |
| returned as the result of a future allocation from some other pool. |
| Otherwise, the return value is meaningless; note that this function may |
| <strong>not</strong> be used to reliably test random pointer values.</td> |
| </tr> |
| </table><br> |
| |
| <table border align="center" summary=""> |
| <caption> |
| <em>Allocation and Deallocation</em> |
| </caption> |
| |
| <tr> |
| <th>Expression</th> |
| |
| <th>Return Type</th> |
| |
| <th>Pre-Condition</th> |
| |
| <th>Semantic Equivalence</th> |
| |
| <th>Notes</th> |
| </tr> |
| |
| <tr> |
| <td class="code">t.malloc()</td> |
| |
| <td class="code">ElementType *</td> |
| |
| <td></td> |
| |
| <td></td> |
| |
| <td>Allocates memory that can hold an object of type <span class= |
| "code">ElementType</span>. If out of memory, returns <span class= |
| "code">0</span>. Amortized O(1).</td> |
| </tr> |
| |
| <tr> |
| <td class="code">t.free(p)</td> |
| |
| <td>not used</td> |
| |
| <td><span class="code">p</span> must have been previously allocated from <span class="code"> |
| t</span></td> |
| |
| <td></td> |
| |
| <td>Deallocates a chunk of memory. Note that <span class= |
| "code">p</span> may not be <span class="code">0</span>. Note that the |
| destructor for <span class="code">p</span> is not called. O(N).</td> |
| </tr> |
| |
| <tr> |
| <td class="code">t.construct(???)</td> |
| |
| <td class="code">ElementType *</td> |
| |
| <td><span class="code">ElementType</span> must have a constructor |
| matching <span class="code">???</span>; the number of parameters given |
| must not exceed what is supported through <a href= |
| "../implementation/pool_construct.html">pool_construct</a></td> |
| |
| <td></td> |
| |
| <td>Allocates and initializes an object of type <span class= |
| "code">ElementType</span>. If out of memory, returns <span class= |
| "code">0</span>. Amortized O(1).</td> |
| </tr> |
| |
| <tr> |
| <td class="code">t.destroy(p)</td> |
| |
| <td>not used</td> |
| |
| <td><span class="code">p</span> must have been previously allocated from <span class="code"> |
| t</span></td> |
| |
| <td class="code">p->~ElementType(); t.free(p);</td> |
| |
| <td></td> |
| </tr> |
| </table> |
| |
| <h2>Symbols</h2> |
| |
| <ul> |
| <li>boost::object_pool</li> |
| </ul> |
| |
| <h2><a href="../implementation/object_pool.html">Implementation Details</a></h2> |
| <hr> |
| |
| <p><a href="http://validator.w3.org/check?uri=referer"><img border="0" src= |
| "../../../../doc/images/valid-html401.png" alt="Valid HTML 4.01 Transitional" |
| height="31" width="88"></a></p> |
| |
| <p>Revised |
| <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %B, %Y" startspan -->05 December, 2006<!--webbot bot="Timestamp" endspan i-checksum="38516" --></p> |
| |
| <p><i>Copyright © 2000, 2001 Stephen Cleary (scleary AT jerviswebb DOT com)</i></p> |
| |
| <p><i>Distributed under the Boost Software License, Version 1.0. (See |
| accompanying file <a href="../../../../LICENSE_1_0.txt">LICENSE_1_0.txt</a> |
| or copy at <a href= |
| "http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</a>)</i></p> |
| </body> |
| </html> |