1 <?xml version=
"1.0" encoding=
"utf-8" ?>
2 <!DOCTYPE html PUBLIC
"-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3 <html xmlns=
"http://www.w3.org/1999/xhtml" xml:
lang=
"en" lang=
"en">
5 <meta http-equiv=
"Content-Type" content=
"text/html; charset=utf-8" />
6 <meta name=
"generator" content=
"Docutils 0.3.10: http://docutils.sourceforge.net/" />
7 <title>Boost Pointer Container Library
</title>
8 <meta name=
"author" content=
"Thorsten Ottosen" />
9 <meta name=
"date" content=
"27th of October 2007" />
10 <meta name=
"copyright" content=
"Thorsten Ottosen 2004-2007. Use, modification and distribution is subject to the Boost Software License, Version 1.0 (see LICENSE_1_0.txt)." />
11 <style type=
"text/css">
14 :Author: David Goodger
15 :Contact: goodger@users.sourceforge.net
18 :Copyright: This stylesheet has been placed in the public domain.
20 Default cascading style sheet for the HTML output of Docutils.
22 See http://docutils.sf.net/docs/howto/html-stylesheets.html for how to
23 customize this style sheet.
26 /*
"! important" is used here to override other ``margin-top`` and
27 ``margin-bottom`` styles that are later in the stylesheet or
28 more specific. See http://www.w3.org/TR/CSS1#the-cascade */
30 margin-top:
0 ! important }
32 .last, .with-subtitle {
33 margin-bottom:
0 ! important }
39 text-decoration: none ;
46 margin-bottom:
0.5em }
48 /* Uncomment (and remove this text!) to get bold-faced definition list terms
56 div.abstract p.topic-title {
60 div.admonition, div.attention, div.caution, div.danger, div.error,
61 div.hint, div.important, div.note, div.tip, div.warning {
63 border: medium outset ;
66 div.admonition p.admonition-title, div.hint p.admonition-title,
67 div.important p.admonition-title, div.note p.admonition-title,
68 div.tip p.admonition-title {
70 font-family: sans-serif }
72 div.attention p.admonition-title, div.caution p.admonition-title,
73 div.danger p.admonition-title, div.error p.admonition-title,
74 div.warning p.admonition-title {
77 font-family: sans-serif }
79 /* Uncomment (and remove this text!) to get reduced vertical space in
81 div.compound .compound-first, div.compound .compound-middle {
82 margin-bottom:
0.5em }
84 div.compound .compound-last, div.compound .compound-middle {
93 div.dedication p.topic-title {
100 div.footer, div.header {
109 div.line-block div.line-block {
116 border: medium outset ;
118 background-color: #ffffee ;
123 div.sidebar p.rubric {
124 font-family: sans-serif ;
127 div.system-messages {
130 div.system-messages h1 {
134 border: medium outset ;
137 div.system-message p.system-message-title {
144 h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
145 h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
166 ol.simple, ul.simple {
170 list-style: decimal }
173 list-style: lower-alpha }
176 list-style: upper-alpha }
179 list-style: lower-roman }
182 list-style: upper-roman }
196 white-space: nowrap }
205 font-family: sans-serif ;
210 font-family: sans-serif ;
226 pre.literal-block, pre.doctest-block {
229 background-color: #eeeeee }
232 font-family: sans-serif ;
233 font-style: oblique }
235 span.classifier-delimiter {
236 font-family: sans-serif ;
240 font-family: sans-serif }
243 white-space: nowrap }
251 span.section-subtitle {
252 /* font-size relative to parent (h1..h6 element) */
256 border-left: solid thin gray }
263 margin-bottom:
0.5em }
266 border-left: solid thin black }
268 table.docutils td, table.docutils th,
269 table.docinfo td, table.docinfo th {
270 padding-left:
0.5em ;
271 padding-right:
0.5em ;
272 vertical-align: top }
274 table.docutils th.field-name, table.docinfo th.docinfo-name {
277 white-space: nowrap ;
280 h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
281 h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
285 background-color: #eeeeee }
288 list-style-type: none }
293 <div class=
"document" id=
"boost-pointer-container-library">
294 <h1 class=
"title"><img alt=
"Boost" src=
"boost.png" /> Pointer Container Library
</h1>
295 <table class=
"docinfo" frame=
"void" rules=
"none">
296 <col class=
"docinfo-name" />
297 <col class=
"docinfo-content" />
299 <tr><th class=
"docinfo-name">Author:
</th>
300 <td>Thorsten Ottosen
</td></tr>
301 <tr><th class=
"docinfo-name">Contact:
</th>
302 <td><a class=
"first reference" href=
"mailto:nesotto@cs.aau.dk">nesotto
@cs.aau.dk
</a> or
<a class=
"last reference" href=
"mailto:tottosen@dezide.com">tottosen
@dezide.com
</a></td></tr>
303 <tr class=
"field"><th class=
"docinfo-name">Organizations:
</th><td class=
"field-body"><a class=
"reference" href=
"http://www.cs.aau.dk">Department of Computer Science
</a>, Aalborg University, and
<a class=
"reference" href=
"http://www.dezide.com">Dezide Aps
</a></td>
305 <tr><th class=
"docinfo-name">Date:
</th>
306 <td>27th of October
2007</td></tr>
307 <tr><th class=
"docinfo-name">Copyright:
</th>
308 <td>Thorsten Ottosen
2004-
2007. Use, modification and distribution is subject to the Boost Software License, Version
1.0 (see
<a class=
"reference" href=
"http://www.boost.org/LICENSE_1_0.txt">LICENSE_1_0.txt
</a>).
</td></tr>
311 <div class=
"section">
312 <h1><a id=
"overview" name=
"overview">Overview
</a></h1>
313 <p>Boost.Pointer Container provides containers for holding heap-allocated
314 objects in an exception-safe manner and with minimal overhead.
315 The aim of the library is in particular to make OO programming
316 easier in C++ by establishing a standard set of classes, methods
317 and designs for dealing with OO specific problems
</p>
319 <li><a class=
"reference" href=
"#motivation">Motivation
</a></li>
320 <li><a class=
"reference" href=
"tutorial.html">Tutorial
</a></li>
321 <li><a class=
"reference" href=
"reference.html">Reference
</a></li>
322 <li><a class=
"reference" href=
"guidelines.html">Usage guidelines
</a></li>
323 <li><a class=
"reference" href=
"examples.html">Examples
</a></li>
324 <li><a class=
"reference" href=
"headers.html">Library headers
</a></li>
325 <li><a class=
"reference" href=
"faq.html">FAQ
</a></li>
326 <li><a class=
"reference" href=
"#upgrading-from-boost-v-1-33">Upgrading from Boost v.
1.33.*
</a></li>
327 <li><a class=
"reference" href=
"#upgrading-from-boost-v-1-34">Upgrading from Boost v.
1.34.*
</a></li>
328 <li><a class=
"reference" href=
"#upgrading-from-boost-v-1-35">Upgrading from Boost v.
1.35.*
</a></li>
329 <li><a class=
"reference" href=
"#future-developments">Future Developments
</a></li>
330 <li><a class=
"reference" href=
"#acknowledgements">Acknowledgements
</a></li>
331 <li><a class=
"reference" href=
"#references">References
</a></li>
333 <!-- - `Conventions <conventions.html>`_
334 - `The Clonable Concept <reference.html#the-clonable-concept>`_
335 - `The Clone Allocator Concept <reference.html#the-clone-allocator-concept>`_
336 - `Pointer container adapters <reference.html#pointer-container-adapters>`_
337 - `Sequence container classes <reference.html#sequence-containers>`_
339 - `ptr_vector <ptr_vector.html>`_
340 - `ptr_deque <ptr_deque.html>`_
341 - `ptr_list <ptr_list.html>`_
342 - `ptr_array <ptr_array.html>`_
343 - `Associative container classes <reference.html#associative-containers>`_
345 - `ptr_set <ptr_set.html>`_
346 - `ptr_multiset <ptr_multiset.html>`_
347 - `ptr_map <ptr_map.html>`_
348 - `ptr_multimap <ptr_multimap.html>`_
349 - `Indirected functions <indirect_fun.html>`_
350 - `Class nullable <reference.html#class-nullable>`_
351 - `Exception classes <reference.html#exception-classes>`_ -->
353 <div class=
"section">
354 <h1><a id=
"motivation" name=
"motivation">Motivation
</a></h1>
355 <p>Whenever a programmer wants to have a container of pointers to
356 heap-allocated objects, there is usually only one exception-safe way:
357 to make a container of smart pointers like
<a class=
"reference" href=
"../../smart_ptr/shared_ptr.htm">boost::shared_ptr
</a>
358 This approach is suboptimal if
</p>
359 <ol class=
"arabic simple">
360 <li>the stored objects are not shared, but owned exclusively, or
</li>
363 <ol class=
"arabic simple" start=
"2">
364 <li>the overhead implied by smart pointers is inappropriate
</li>
366 <p>This library therefore provides standard-like containers that are for storing
367 heap-allocated or
<a class=
"reference" href=
"reference.html#the-clonable-concept">cloned
</a> objects (or in case of a map, the mapped object must be
368 a heap-allocated or cloned object). For each of the standard
369 containers there is a pointer container equivalent that takes ownership of
370 the objects in an exception safe manner. In this respect the library is intended
371 to solve the so-called
372 <a class=
"reference" href=
"faq.html#what-is-the-polymorphic-class-problem">polymorphic class problem
</a>.
</p>
373 <p>The advantages of pointer containers are
</p>
374 <ol class=
"arabic simple">
375 <li>Exception-safe pointer storage and manipulation.
</li>
378 <ol class=
"arabic simple" start=
"2">
379 <li>Notational convenience compared to the use of containers of pointers.
</li>
382 <ol class=
"arabic simple" start=
"3">
383 <li>Can be used for types that are neither Assignable nor Copy Constructible.
</li>
386 <ol class=
"arabic simple" start=
"4">
387 <li>No memory-overhead as containers of smart pointers can have (see
<a class=
"footnote-reference" href=
"#id23" id=
"id2" name=
"id2">[
11]
</a> and
<a class=
"footnote-reference" href=
"#id25" id=
"id3" name=
"id3">[
12]
</a>).
</li>
390 <ol class=
"arabic simple" start=
"5">
391 <li>Usually faster than using containers of smart pointers (see
<a class=
"footnote-reference" href=
"#id23" id=
"id4" name=
"id4">[
11]
</a> and
<a class=
"footnote-reference" href=
"#id25" id=
"id5" name=
"id5">[
12]
</a>).
</li>
394 <ol class=
"arabic simple" start=
"6">
395 <li>The interface is slightly changed towards the domain of pointers
396 instead of relying on the normal value-based interface. For example,
397 now it is possible for
<tt class=
"docutils literal"><span class=
"pre">pop_back()
</span></tt> to return the removed element.
</li>
400 <ol class=
"arabic simple" start=
"7">
401 <li>Propagates constness such that one cannot modify the objects via a
<tt class=
"docutils literal"><span class=
"pre">const_iterator
</span></tt>.
</li>
404 <ol class=
"arabic simple" start=
"8">
405 <li>Built-in support for deep-copy semantics via the
<a class=
"reference" href=
"reference.html#the-clonable-concept">the Clonable concept
</a></li>
407 <p>The disadvantages are
</p>
408 <ol class=
"arabic simple">
409 <li>Less flexible than containers of smart pointers like
<a class=
"reference" href=
"../../smart_ptr/shared_ptr.htm">boost::shared_ptr
</a></li>
411 <p>When you do need shared semantics, this library is not what you need.
</p>
413 <div class=
"section">
414 <h1><a id=
"upgrading-from-boost-v-1-33" name=
"upgrading-from-boost-v-1-33">Upgrading from Boost v.
<tt class=
"docutils literal"><span class=
"pre">1.33.*
</span></tt></a></h1>
415 <p>If you upgrade from one of these versions of Boost, then there has been one
416 major interface change: map iterators now mimic iterators from
<tt class=
"docutils literal"><span class=
"pre">std::map
</span></tt>.
417 Previously you may have written
</p>
418 <pre class=
"literal-block">
419 for( boost::ptr_map
<std::string,T
>::iterator i = m.begin(), e = m.end();
422 std::cout
<< "key:
" << i.key();
423 std::cout
<< "value:
" << *i;
424 i-
>foo(); // call T::foo()
427 <p>and this now needs to be converted into
</p>
428 <pre class=
"literal-block">
429 for( boost::ptr_map
<std::string,T
>::iterator i = m.begin(), e = m.end();
432 std::cout
<< "key:
" << i-
>first;
433 std::cout
<< "value:
" << *i-
>second;
434 i-
>second-
>foo(); // call T::foo()
437 <p>Apart from the above change, the library now also introduces
</p>
439 <li><p class=
"first"><tt class=
"docutils literal"><span class=
"pre">std::auto_ptr
<T
></span></tt> overloads:
</p>
440 <pre class=
"literal-block">
441 std::auto_ptr
<T
> p( new T );
442 container.push_back( p );
445 <li><p class=
"first">Derived-to-Base conversion in
<tt class=
"docutils literal"><span class=
"pre">transfer()
</span></tt>:
</p>
446 <pre class=
"literal-block">
447 boost::ptr_vector
<Base
> vec;
448 boost::ptr_list
<Derived
> list;
450 vec.transfer( vec.begin(), list ); // now ok
454 <p>Also note that
<a class=
"reference" href=
"../../assign/index.html">Boost.Assign
</a> introduces better support
455 for pointer containers.
</p>
457 <div class=
"section">
458 <h1><a id=
"upgrading-from-boost-v-1-34" name=
"upgrading-from-boost-v-1-34">Upgrading from Boost v.
<tt class=
"docutils literal"><span class=
"pre">1.34.*
</span></tt></a></h1>
459 <p>Serialization has now been made optional thanks to Sebastian Ramacher.
460 You simply include
<tt class=
"docutils literal"><span class=
"pre"><boost/ptr_container/serialize.hpp
></span></tt> or perhaps
461 just one of the more specialized headers.
</p>
462 <p>All containers are now copy-constructible and assignable. So you can e.g. now
464 <pre class=
"literal-block">
465 boost::ptr_vector
<Derived
> derived = ...;
466 boost::ptr_vector
<Base
> base( derived );
469 <p>As the example shows, derived-to-base class conversions are also allowed.
</p>
470 <p>A few general functions have been added:
</p>
471 <pre class=
"literal-block">
472 VoidPtrContainer
& base();
473 const VoidPtrContainer
& base() const;
475 <p>These allow direct access to the wrapped container which is
476 sometimes needed when you want to provide extra functionality.
</p>
477 <p>A few new functions have been added to sequences:
</p>
478 <pre class=
"literal-block">
479 void resize( size_type size );
480 void resize( size_type size, T* to_clone );
482 <p><tt class=
"docutils literal"><span class=
"pre">ptr_vector
<T
></span></tt> has a few new helper functions to integrate better with C-arrays:
</p>
483 <pre class=
"literal-block">
484 void transfer( iterator before, T** from, size_type size, bool delete_from = true );
487 <p>Finally, you can now also
"copy
" and
"assign
" an
<tt class=
"docutils literal"><span class=
"pre">auto_type
</span></tt> ptr by calling
<tt class=
"docutils literal"><span class=
"pre">move()
</span></tt>:
</p>
488 <pre class=
"literal-block">
489 boost::ptr_vector
<T
>::auto_type move_ptr = ...;
490 return boost::ptr_container::move( move_ptr );
493 <div class=
"section">
494 <h1><a id=
"upgrading-from-boost-v-1-35" name=
"upgrading-from-boost-v-1-35">Upgrading from Boost v.
<tt class=
"docutils literal"><span class=
"pre">1.35.*
</span></tt></a></h1>
495 <p>The library has been fairly stable, but a few new containers have been supported:
</p>
497 <li><tt class=
"docutils literal"><span class=
"pre">boost::ptr_unordered_set
<T
></span></tt> in
<tt class=
"docutils literal"><span class=
"pre"><boost/ptr_container/ptr_unordered_set.hpp
></span></tt></li>
498 <li><tt class=
"docutils literal"><span class=
"pre">boost::ptr_unordered_map
<Key,T
></span></tt> in
<tt class=
"docutils literal"><span class=
"pre"><boost/ptr_container/ptr_unordered_map.hpp
></span></tt></li>
499 <li><tt class=
"docutils literal"><span class=
"pre">boost::ptr_circular_buffer
<T
></span></tt> in
<tt class=
"docutils literal"><span class=
"pre"><boost/ptr_container/ptr_circular_buffer.hpp
></span></tt></li>
501 <p>There are no docs for these classes yet, but they are almost identical to
502 <tt class=
"docutils literal"><span class=
"pre">boost::ptr_set
<T
></span></tt>,
<tt class=
"docutils literal"><span class=
"pre">boost::ptr_map
<Key,T
></span></tt> and
<tt class=
"docutils literal"><span class=
"pre">boost::ptr_array
<T,N
></span></tt>, respectively.
503 The underlying containers stem from the two boost libraries
</p>
505 <li><a class=
"reference" href=
"../../unordered/index.html">Boost.Unordered
</a></li>
506 <li><a class=
"reference" href=
"../../circular_buffer/index.html">Boost.Circular Buffer
</a></li>
508 <p>Furthermore,
<a class=
"reference" href=
"ptr_inserter.html">insert iterators
</a> have been added.
</p>
510 <div class=
"section">
511 <h1><a id=
"future-developments" name=
"future-developments">Future Developments
</a></h1>
512 <p>There are indications that the
<tt class=
"docutils literal"><span class=
"pre">void*
</span></tt> implementation has a slight
513 performance overhead compared to a
<tt class=
"docutils literal"><span class=
"pre">T*
</span></tt> based implementation. Furthermore, a
514 <tt class=
"docutils literal"><span class=
"pre">T*
</span></tt> based implementation is so much easier to use type-safely
515 with algorithms. Therefore I anticipate to move to a
<tt class=
"docutils literal"><span class=
"pre">T*
</span></tt> based implementation.
</p>
516 <p>Furthermore, the clone allocator might be allowed to have state.
517 This design requires some thought, so if you have good ideas and use-cases'
518 for this, please don't hesitate to contact me.
</p>
519 <p>Also, support for Boost.Interprocess is on the todo list.
</p>
520 <p>There has been a few request for
<tt class=
"docutils literal"><span class=
"pre">boost::ptr_multi_index_container
<T,...
></span></tt>.
521 I investigated how difficult it would be, and it did turn out to be difficult, albeit
522 not impossible. But I don't have the resources to implement this beast
523 for years to come, so if someone really needs this container, I suggest that they
524 talk with me in private about how it can be done.
</p>
526 <div class=
"section">
527 <h1><a id=
"acknowledgements" name=
"acknowledgements">Acknowledgements
</a></h1>
528 <p>The following people have been very helpful:
</p>
530 <li>Bjørn D. Rasmussen for unintentionally motivating me to start this library
</li>
531 <li>Pavel Vozenilek for asking me to make the adapters
</li>
532 <li>David Abrahams for the
<tt class=
"docutils literal"><span class=
"pre">indirect_fun
</span></tt> design
</li>
533 <li>Pavol Droba for being review manager
</li>
534 <li>Ross Boylan for trying out a prototype for real
</li>
535 <li>Felipe Magno de Almeida for giving fedback based on using the
536 library in production code even before the library was part of boost
</li>
537 <li>Jonathan Turkanis for supplying his
<tt class=
"docutils literal"><span class=
"pre">move_ptr
</span></tt> framework
538 which is used internally
</li>
539 <li>Stefan Slapeta and Howard Hinnant for Metrowerks support
</li>
540 <li>Russell Hind for help with Borland compatibility
</li>
541 <li>Jonathan Wakely for his great help with GCC compatibility and bug fixes
</li>
542 <li>Pavel Chikulaev for comments and bug-fixes
</li>
543 <li>Andreas Hommel for fixing the nasty Metrowerks bug
</li>
544 <li>Charles Brockman for his many comments on the documentation
</li>
545 <li>Sebastian Ramacher for implementing the optional serialization support
</li>
548 <div class=
"section">
549 <h1><a id=
"references" name=
"references">References
</a></h1>
550 <table class=
"docutils footnote" frame=
"void" id=
"id8" rules=
"none">
551 <colgroup><col class=
"label" /><col /></colgroup>
553 <tr><td class=
"label"><a name=
"id8">[
1]
</a></td><td>Matt Austern:
<a class=
"reference" href=
"http://www.cuj.com/documents/s=7990/cujcexp1910austern/">"The Standard Librarian: Containers of Pointers
"</a> , C/C++ Users Journal Experts Forum.
</td></tr>
556 <table class=
"docutils footnote" frame=
"void" id=
"id10" rules=
"none">
557 <colgroup><col class=
"label" /><col /></colgroup>
559 <tr><td class=
"label"><a name=
"id10">[
2]
</a></td><td>Bjarne Stroustrup,
"The C++ Programming Language
",
<a class=
"reference" href=
"http://www.research.att.com/~bs/3rd_safe.pdf">Appendix E:
"Standard-Library Exception Safety
"</a></td></tr>
562 <table class=
"docutils footnote" frame=
"void" id=
"id12" rules=
"none">
563 <colgroup><col class=
"label" /><col /></colgroup>
565 <tr><td class=
"label"><a name=
"id12">[
3]
</a></td><td>Herb Sutter,
"Exceptional C++
".
</td></tr>
568 <table class=
"docutils footnote" frame=
"void" id=
"id13" rules=
"none">
569 <colgroup><col class=
"label" /><col /></colgroup>
571 <tr><td class=
"label"><a name=
"id13">[
4]
</a></td><td>Herb Sutter,
"More Exceptional C++
".
</td></tr>
574 <table class=
"docutils footnote" frame=
"void" id=
"id14" rules=
"none">
575 <colgroup><col class=
"label" /><col /></colgroup>
577 <tr><td class=
"label"><a name=
"id14">[
5]
</a></td><td>Kevlin Henney:
<a class=
"reference" href=
"http://www.cuj.com/documents/s=7986/cujcexp2002henney/henney.htm">"From Mechanism to Method: The Safe Stacking of Cats
"</a> , C++ Experts Forum, February
2002.
</td></tr>
580 <table class=
"docutils footnote" frame=
"void" id=
"id16" rules=
"none">
581 <colgroup><col class=
"label" /><col /></colgroup>
583 <tr><td class=
"label"><a name=
"id16">[
6]
</a></td><td>Some of the few earlier attempts of pointer containers I have seen are the rather interesting
<a class=
"reference" href=
"http://www.ntllib.org/asp.html">NTL
</a> and the
584 <a class=
"reference" href=
"http://ootips.org/yonat/4dev/pointainer.h">pointainer
</a>.
585 As of this writing both libraries are not exceptions-safe and can leak.
</td></tr>
588 <table class=
"docutils footnote" frame=
"void" id=
"id17" rules=
"none">
589 <colgroup><col class=
"label" /><col /></colgroup>
591 <tr><td class=
"label"><a name=
"id17">[
7]
</a></td><td>INTERNATIONAL STANDARD, Programming languages --- C++, ISO/IEC
14882,
1998. See section
23 in particular.
</td></tr>
594 <table class=
"docutils footnote" frame=
"void" id=
"id18" rules=
"none">
595 <colgroup><col class=
"label" /><col /></colgroup>
597 <tr><td class=
"label"><a name=
"id18">[
8]
</a></td><td>C++ Standard Library Closed Issues List (Revision
27),
598 Item
218,
<a class=
"reference" href=
"http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-closed.html#218">Algorithms do not use binary predicate objects for default comparisons
</a>.
</td></tr>
601 <table class=
"docutils footnote" frame=
"void" id=
"id20" rules=
"none">
602 <colgroup><col class=
"label" /><col /></colgroup>
604 <tr><td class=
"label"><a name=
"id20">[
9]
</a></td><td>C++ Standard Library Active Issues List (Revision
27),
605 Item
226,
<a class=
"reference" href=
"http://gcc.gnu.org/onlinedocs/libstdc++/ext/lwg-active.html#226">User supplied specializations or overloads of namespace std function templates
</a>.
</td></tr>
608 <table class=
"docutils footnote" frame=
"void" id=
"id22" rules=
"none">
609 <colgroup><col class=
"label" /><col /></colgroup>
611 <tr><td class=
"label"><a name=
"id22">[
10]
</a></td><td>Harald Nowak,
"A remove_if for vector
", C/C++ Users Journal, July
2001.
</td></tr>
614 <table class=
"docutils footnote" frame=
"void" id=
"id23" rules=
"none">
615 <colgroup><col class=
"label" /><col /></colgroup>
617 <tr><td class=
"label"><a name=
"id23">[
11]
</a></td><td><em>(
<a class=
"fn-backref" href=
"#id2">1</a>,
<a class=
"fn-backref" href=
"#id4">2</a>)
</em> Boost smart pointer
<a class=
"reference" href=
"http://www.boost.org/libs/smart_ptr/smarttests.htm">timings
</a></td></tr>
620 <table class=
"docutils footnote" frame=
"void" id=
"id25" rules=
"none">
621 <colgroup><col class=
"label" /><col /></colgroup>
623 <tr><td class=
"label"><a name=
"id25">[
12]
</a></td><td><em>(
<a class=
"fn-backref" href=
"#id3">1</a>,
<a class=
"fn-backref" href=
"#id5">2</a>)
</em> <a class=
"reference" href=
"http://www.ntllib.org/asp.html">NTL
</a>: Array vs std::vector and boost::shared_ptr
</td></tr>
626 <table class=
"docutils footnote" frame=
"void" id=
"id26" rules=
"none">
627 <colgroup><col class=
"label" /><col /></colgroup>
629 <tr><td class=
"label"><a name=
"id26">[
13]
</a></td><td>Kevlin Henney,
<a class=
"reference" href=
"http://www.two-sdg.demon.co.uk/curbralan/papers/europlop/NullObject.pdf">Null Object
</a>,
2002.
</td></tr>
632 <hr><table class=
"docutils field-list" frame=
"void" rules=
"none">
633 <col class=
"field-name" />
634 <col class=
"field-body" />
636 <tr class=
"field"><th class=
"field-name">Copyright:
</th><td class=
"field-body">Thorsten Ottosen
2004-
2006.
</td>