Hi all, The review of the Smart Container library, written by Thorsten Ottosen starts today (September 26th, 2004) and runs for 10 days (until October 5th, 2004). The latest version of the library can be found at http://boost-sandbox.sourceforge.net/smart_container.zip or http://groups.yahoo.com/group/boost/files/pointer%20container/smart_containe... The package contains all you need to sucessfuly use the library with the Boost version 1.31 or later, however library tests require the latest Boost.Test, that is available from the main Boost CVS. What does the library provide? The library documentation states:
>>>>>>>>>>
Whenever a programmer wants to have a container of pointers to heap-allocated objects, there is usually only one
exception-safe way: to make a container of smart pointers like boost::shared_ptr. This approach is suboptimal if
1. the stored objects are not shared, but owned exclusively, or
2. the overhead implied by smart pointers is inappropriate
This library therefore provides standard-like containers that are for storing heap-allocated or cloned objects
(or in case of a map, the mapped object must be a heap-allocated or cloned object). For each of the standard
containers there is a smart container equivalent that takes ownership of the objects in an exception safe manner.
In this respect the library is intended to solve the so-called polymorphic class problem.
The advantages of smart containers are
1. Exception-safe and fool proof pointer storage and manipulation.
2. Notational convenience compared to the use of containers of pointers.
3. Can be used for types that are neither Assignable nor Copy Constructible.
4. No memory-overhead as containers of smart pointers can have (see 11 and 12).
5. Usually faster than using containers of smart pointers (see 11 and 12).
6. The interface is slightly changed towards the domain of pointers instead of relying on the
normal value-based interface. For example, now it is possible for pop_back() to return the removed element.
The disadvantages are
1. Less flexible than containers of smart pointers
<<<<<<<<<<<<<<<
As an example of how the new containers look like, consider that
<code>
typedef boost::shared_ptr<Foo> foo_ptr;
std::vector