1 <!DOCTYPE html PUBLIC
"-//W3C//DTD HTML 4.01 Transitional//EN">
4 <title>Smart Pointer Changes
</title>
5 <meta http-equiv=
"Content-Type" content=
"text/html; charset=iso-8859-1">
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">Smart Pointer Changes
</h1>
10 <p>The February
2002 change to the Boost smart pointers introduced a number of
11 changes. Since the previous version of the smart pointers was in use for a long
12 time, it's useful to have a detailed list of what changed from a library user's
14 <p>Note that for compilers that don't support member templates well enough, a
15 separate implementation is used that lacks many of the new features and is more
16 like the old version.
</p>
17 <h2>Features Requiring Code Changes to Take Advantage
</h2>
20 The smart pointer class templates now each have their own header file. For
21 compatibility, the
<a href=
"../../boost/smart_ptr.hpp"><boost/smart_ptr.hpp
></a>
22 header now includes the headers for the four classic smart pointer class
28 The new
<b>shared_ptr
</b> and
<b>shared_array
</b> relax the requirement that
29 the pointed-to object's destructor must be visible when instantiating the
<b>shared_ptr
</b>
30 destructor. This makes it easier to have shared_ptr members in classes without
33 A custom deallocator can be passed in when creating a
<b>shared_ptr
</b> or
<b>shared_array
</b>.
35 <b>shared_static_cast
</b> and
<b>shared_dynamic_cast
</b> function templates are
36 provided which work for
<b>shared_ptr
</b> and
<b>weak_ptr
</b> as
<b>static_cast
</b>
37 and
<b>dynamic_cast
</b>
40 The self-assignment misfeature has been removed from
<b>shared_ptr::reset
</b>,
41 although it is still present in
<b>scoped_ptr
</b>, and in
<b>std::auto_ptr
</b>.
42 Calling
<b>reset
</b> with a pointer to the object that's already owned by the
<b>shared_ptr
</b>
43 results in undefined behavior (an assertion, or eventually a double-delete if
46 The
<b>BOOST_SMART_PTR_CONVERSION
</b>
47 feature has been removed.
49 <b>shared_ptr
<void
></b> is now allowed.
</li>
51 <h2>Features That Improve Robustness
</h2>
54 The manipulation of use counts is now
<a name=
"threadsafe">thread safe
</a> on
55 Windows, Linux, and platforms that support pthreads. See the
<a href=
"../../boost/detail/atomic_count.hpp">
56 <boost/detail/atomic_count.hpp
></a>
59 The new shared_ptr will always delete the object using the pointer it was
60 originally constructed with. This prevents subtle problems that could happen if
61 the last
<b>shared_ptr
</b> was a pointer to a sub-object of a class that did
62 not have a virtual destructor.
</li>
64 <h2>Implementation Details
</h2>
67 Some bugs in the assignment operator implementations and in
<b>reset
</b>
68 have been fixed by using the
"copy and swap" idiom.
70 Assertions have been added to check preconditions of various functions;
71 however, since these use the new
<a href=
"../../boost/assert.hpp"><boost/assert.hpp
></a>
72 header, the assertions are disabled by default.
74 The partial specialization of
<b>std::less
</b> has been replaced by
<b>operator
<</b>
75 overloads which accomplish the same thing without relying on undefined
78 The incorrect overload of
<b>std::swap
</b> has been replaced by
<b>boost::swap
</b>,
79 which has many of the same advantages for generic programming but does not
80 violate the C++ standard.
</li>
84 <p><small>Copyright
2002 Darin Adler. Distributed under the Boost Software License, Version
85 1.0. See accompanying file
<A href=
"../../LICENSE_1_0.txt">LICENSE_1_0.txt
</A> or
86 copy at
<A href=
"http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt
</A>.
</small></p>