diff --git a/include/boost/detail/shared_count.hpp b/include/boost/detail/shared_count.hpp index 9be3d5e..c2c10a0 100644 --- a/include/boost/detail/shared_count.hpp +++ b/include/boost/detail/shared_count.hpp @@ -8,7 +8,7 @@ // // detail/shared_count.hpp // -// Copyright (c) 2001, 2002 Peter Dimov and Multi Media Ltd. +// Copyright (c) 2001, 2002, 2003 Peter Dimov and Multi Media Ltd. // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. @@ -386,7 +386,7 @@ public: long use_count() const // nothrow { - return pi_ != 0? pi_->use_count(): 42; // '42' is an example of 'unspecified' + return pi_ != 0? pi_->use_count(): 0; } bool unique() const // nothrow diff --git a/enable_shared_from_this_test.cpp b/shared_from_this_test.cpp similarity index 96% rename from enable_shared_from_this_test.cpp rename to shared_from_this_test.cpp index 75ca31d..d5dbe6e 100644 --- a/enable_shared_from_this_test.cpp +++ b/shared_from_this_test.cpp @@ -6,9 +6,9 @@ #endif // -// enable_shared_from_this_test.cpp +// shared_from_this_test.cpp // -// Copyright (c) 2002 Peter Dimov +// Copyright (c) 2002, 2003 Peter Dimov // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. diff --git a/shared_ptr.htm b/shared_ptr.htm index b2f9dcf..0f7d49d 100644 --- a/shared_ptr.htm +++ b/shared_ptr.htm @@ -258,7 +258,8 @@ template<class Y> shared_ptr(shared_ptr<Y> const & r); // never

Effects: If r is empty, constructs an empty shared_ptr; otherwise, constructs a shared_ptr that shares ownership with r.

-

Postconditions: get() == r.get().

+

Postconditions: get() == r.get() && use_count() == + r.use_count().

Throws: nothing.

template<class Y> explicit shared_ptr(weak_ptr<Y> const & r);
@@ -266,6 +267,7 @@ template<class Y> shared_ptr(shared_ptr<Y> const & r); // never

Effects: If r is empty, constructs an empty shared_ptr; otherwise, constructs a shared_ptr that shares ownership with r and stores a copy of the pointer stored in r.

+

Postconditions: use_count() == r.use_count().

Throws: bad_weak_ptr when r.use_count() == 0.

Exception safety: If an exception is thrown, the constructor has no effect.

@@ -359,9 +361,9 @@ q = p;

use_count

long use_count() const; // never throws
-

Returns: the number of shared_ptr objects that share ownership - with *this, or an unspecified nonnegative value when *this - is empty.

+

Returns: the number of shared_ptr objects, *this included, that + share ownership with *this, or an unspecified nonnegative value + when *this is empty.

Throws: nothing.

Notes: use_count() is not necessarily efficient. Use only for debugging and testing purposes, not for production code.

diff --git a/shared_ptr_test.cpp b/shared_ptr_test.cpp index 4f0fe39..4e3e80b 100644 --- a/shared_ptr_test.cpp +++ b/shared_ptr_test.cpp @@ -9,7 +9,7 @@ // // shared_ptr_test.cpp // -// Copyright (c) 2002 Peter Dimov +// Copyright (c) 2002, 2003 Peter Dimov // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. @@ -481,18 +481,21 @@ void copy_constructor() BOOST_TEST(pi2? false: true); BOOST_TEST(!pi2); BOOST_TEST(pi2.get() == 0); + BOOST_TEST(pi2.use_count() == pi.use_count()); boost::shared_ptr pi3(pi); BOOST_TEST(pi3 == pi); BOOST_TEST(pi3? false: true); BOOST_TEST(!pi3); BOOST_TEST(pi3.get() == 0); + BOOST_TEST(pi3.use_count() == pi.use_count()); boost::shared_ptr pi4(pi3); BOOST_TEST(pi4 == pi3); BOOST_TEST(pi4? false: true); BOOST_TEST(!pi4); BOOST_TEST(pi4.get() == 0); + BOOST_TEST(pi4.use_count() == pi3.use_count()); } { @@ -503,6 +506,7 @@ void copy_constructor() BOOST_TEST(pv2? false: true); BOOST_TEST(!pv2); BOOST_TEST(pv2.get() == 0); + BOOST_TEST(pv2.use_count() == pv.use_count()); } { @@ -513,12 +517,14 @@ void copy_constructor() BOOST_TEST(px2? false: true); BOOST_TEST(!px2); BOOST_TEST(px2.get() == 0); + BOOST_TEST(px2.use_count() == px.use_count()); boost::shared_ptr px3(px); BOOST_TEST(px3 == px); BOOST_TEST(px3? false: true); BOOST_TEST(!px3); BOOST_TEST(px3.get() == 0); + BOOST_TEST(px3.use_count() == px.use_count()); } { @@ -531,8 +537,7 @@ void copy_constructor() BOOST_TEST(pi2.get() == 0); BOOST_TEST(pi2.use_count() == 2); BOOST_TEST(!pi2.unique()); - - BOOST_TEST(pi.use_count() == pi2.use_count()); + BOOST_TEST(pi2.use_count() == pi.use_count()); BOOST_TEST(!(pi < pi2 || pi2 < pi)); // shared ownership test boost::shared_ptr pi3(pi); @@ -542,6 +547,8 @@ void copy_constructor() BOOST_TEST(pi3.get() == 0); BOOST_TEST(pi3.use_count() == 3); BOOST_TEST(!pi3.unique()); + BOOST_TEST(pi3.use_count() == pi.use_count()); + BOOST_TEST(!(pi < pi3 || pi3 < pi)); // shared ownership test boost::shared_ptr pi4(pi2); BOOST_TEST(pi4 == pi2); @@ -550,6 +557,8 @@ void copy_constructor() BOOST_TEST(pi4.get() == 0); BOOST_TEST(pi4.use_count() == 4); BOOST_TEST(!pi4.unique()); + BOOST_TEST(pi4.use_count() == pi2.use_count()); + BOOST_TEST(!(pi2 < pi4 || pi4 < pi2)); // shared ownership test BOOST_TEST(pi3.use_count() == pi4.use_count()); BOOST_TEST(!(pi3 < pi4 || pi4 < pi3)); // shared ownership test @@ -565,8 +574,7 @@ void copy_constructor() BOOST_TEST(px2.get() == 0); BOOST_TEST(px2.use_count() == 2); BOOST_TEST(!px2.unique()); - - BOOST_TEST(px.use_count() == px2.use_count()); + BOOST_TEST(px2.use_count() == px.use_count()); BOOST_TEST(!(px < px2 || px2 < px)); // shared ownership test boost::shared_ptr px3(px); @@ -576,6 +584,8 @@ void copy_constructor() BOOST_TEST(px3.get() == 0); BOOST_TEST(px3.use_count() == 3); BOOST_TEST(!px3.unique()); + BOOST_TEST(px3.use_count() == px.use_count()); + BOOST_TEST(!(px < px3 || px3 < px)); // shared ownership test boost::shared_ptr px4(px2); BOOST_TEST(px4 == px2); @@ -584,6 +594,8 @@ void copy_constructor() BOOST_TEST(px4.get() == 0); BOOST_TEST(px4.use_count() == 4); BOOST_TEST(!px4.unique()); + BOOST_TEST(px4.use_count() == px2.use_count()); + BOOST_TEST(!(px2 < px4 || px4 < px2)); // shared ownership test BOOST_TEST(px3.use_count() == px4.use_count()); BOOST_TEST(!(px3 < px4 || px4 < px3)); // shared ownership test @@ -601,8 +613,7 @@ void copy_constructor() BOOST_TEST(pi2.use_count() == 2); BOOST_TEST(!pi2.unique()); BOOST_TEST(*pi2 == 7); - - BOOST_TEST(pi.use_count() == pi2.use_count()); + BOOST_TEST(pi2.use_count() == pi.use_count()); BOOST_TEST(!(pi < pi2 || pi2 < pi)); // shared ownership test } @@ -618,8 +629,7 @@ void copy_constructor() BOOST_TEST(pv2.get() == p); BOOST_TEST(pv2.use_count() == 2); BOOST_TEST(!pv2.unique()); - - BOOST_TEST(pv.use_count() == pv2.use_count()); + BOOST_TEST(pv2.use_count() == pv.use_count()); BOOST_TEST(!(pv < pv2 || pv2 < pv)); // shared ownership test } @@ -640,7 +650,7 @@ void copy_constructor() BOOST_TEST(X::instances == 1); - BOOST_TEST(px.use_count() == px2.use_count()); + BOOST_TEST(px2.use_count() == px.use_count()); BOOST_TEST(!(px < px2 || px2 < px)); // shared ownership test boost::shared_ptr px3(px); @@ -650,6 +660,8 @@ void copy_constructor() BOOST_TEST(px3.get() == p); BOOST_TEST(px3.use_count() == 3); BOOST_TEST(!px3.unique()); + BOOST_TEST(px3.use_count() == px.use_count()); + BOOST_TEST(!(px < px3 || px3 < px)); // shared ownership test boost::shared_ptr px4(px2); BOOST_TEST(px4 == px2); @@ -658,6 +670,8 @@ void copy_constructor() BOOST_TEST(px4.get() == p); BOOST_TEST(px4.use_count() == 4); BOOST_TEST(!px4.unique()); + BOOST_TEST(px4.use_count() == px2.use_count()); + BOOST_TEST(!(px2 < px4 || px4 < px2)); // shared ownership test BOOST_TEST(px3.use_count() == px4.use_count()); BOOST_TEST(!(px3 < px4 || px4 < px3)); // shared ownership test @@ -678,6 +692,8 @@ void copy_constructor() BOOST_TEST(px.get() == p); BOOST_TEST(px.use_count() == 2); BOOST_TEST(!px.unique()); + BOOST_TEST(px.use_count() == py.use_count()); + BOOST_TEST(!(px < py || py < px)); // shared ownership test BOOST_TEST(X::instances == 1); BOOST_TEST(Y::instances == 1); @@ -689,6 +705,8 @@ void copy_constructor() BOOST_TEST(pv.get() == px.get()); BOOST_TEST(pv.use_count() == 3); BOOST_TEST(!pv.unique()); + BOOST_TEST(pv.use_count() == px.use_count()); + BOOST_TEST(!(px < pv || pv < px)); // shared ownership test boost::shared_ptr pv2(py); BOOST_TEST(pv2 == py); @@ -697,6 +715,8 @@ void copy_constructor() BOOST_TEST(pv2.get() == py.get()); BOOST_TEST(pv2.use_count() == 4); BOOST_TEST(!pv2.unique()); + BOOST_TEST(pv2.use_count() == py.use_count()); + BOOST_TEST(!(py < pv2 || pv2 < py)); // shared ownership test BOOST_TEST(pv.use_count() == pv2.use_count()); BOOST_TEST(!(pv < pv2 || pv2 < pv)); // shared ownership test @@ -710,6 +730,7 @@ void weak_ptr_constructor() { { boost::weak_ptr wp; + BOOST_TEST(wp.use_count() == 0); try { @@ -730,48 +751,69 @@ void weak_ptr_constructor() } } - boost::shared_ptr p(new Y); - boost::weak_ptr wp(p); - { - boost::shared_ptr p2(wp); - BOOST_TEST(p2? true: false); - BOOST_TEST(!!p2); - BOOST_TEST(p2.get() == p.get()); - BOOST_TEST(p2.use_count() == 2); - BOOST_TEST(!p2.unique()); + boost::shared_ptr p; + boost::weak_ptr wp(p); - BOOST_TEST(p.use_count() == p2.use_count()); - BOOST_TEST(!(p < p2 || p2 < p)); // shared ownership test + if(wp.use_count() != 0) // 0 allowed but not required + { + boost::shared_ptr p2(wp); + BOOST_TEST(p2.use_count() == wp.use_count()); + BOOST_TEST(p2.get() == 0); - boost::shared_ptr p3(wp); - BOOST_TEST(p3? true: false); - BOOST_TEST(!!p3); - BOOST_TEST(p3.get() == p.get()); - BOOST_TEST(p3.use_count() == 3); - BOOST_TEST(!p3.unique()); - - BOOST_TEST(p.use_count() == p3.use_count()); + boost::shared_ptr p3(wp); + BOOST_TEST(p3.use_count() == wp.use_count()); + BOOST_TEST(p3.get() == 0); + } } - p.reset(); + { + boost::shared_ptr p(new Y); + boost::weak_ptr wp(p); - try - { - boost::shared_ptr p2(wp); - BOOST_ERROR("shared_ptr p2(wp) failed to throw"); - } - catch(boost::bad_weak_ptr) - { - } + { + boost::shared_ptr p2(wp); + BOOST_TEST(p2? true: false); + BOOST_TEST(!!p2); + BOOST_TEST(p2.get() == p.get()); + BOOST_TEST(p2.use_count() == 2); + BOOST_TEST(!p2.unique()); + BOOST_TEST(p2.use_count() == wp.use_count()); - try - { - boost::shared_ptr p3(wp); - BOOST_ERROR("shared_ptr p3(wp) failed to throw"); - } - catch(boost::bad_weak_ptr) - { + BOOST_TEST(p.use_count() == p2.use_count()); + BOOST_TEST(!(p < p2 || p2 < p)); // shared ownership test + + boost::shared_ptr p3(wp); + BOOST_TEST(p3? true: false); + BOOST_TEST(!!p3); + BOOST_TEST(p3.get() == p.get()); + BOOST_TEST(p3.use_count() == 3); + BOOST_TEST(!p3.unique()); + BOOST_TEST(p3.use_count() == wp.use_count()); + + BOOST_TEST(p.use_count() == p3.use_count()); + } + + p.reset(); + BOOST_TEST(wp.use_count() == 0); + + try + { + boost::shared_ptr p2(wp); + BOOST_ERROR("shared_ptr p2(wp) failed to throw"); + } + catch(boost::bad_weak_ptr) + { + } + + try + { + boost::shared_ptr p3(wp); + BOOST_ERROR("shared_ptr p3(wp) failed to throw"); + } + catch(boost::bad_weak_ptr) + { + } } } diff --git a/sp_debug_hooks.cpp b/sp_debug_hooks.cpp index d289ba4..9c13a6b 100644 --- a/sp_debug_hooks.cpp +++ b/sp_debug_hooks.cpp @@ -1,7 +1,7 @@ // // sp_debug_hooks.cpp // -// Copyright (c) 2002 Peter Dimov +// Copyright (c) 2002, 2003 Peter Dimov // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. diff --git a/weak_ptr.htm b/weak_ptr.htm index 1bafb3e..2bf395b 100644 --- a/weak_ptr.htm +++ b/weak_ptr.htm @@ -124,7 +124,7 @@ if(shared_ptr<int> r = make_shared(q))
weak_ptr();

Effects: Constructs an empty weak_ptr.

-

Postconditions: use count() == 0???.

+

Postconditions: use_count() == 0.

Throws: nothing.

template<class Y> weak_ptr(shared_ptr<Y> const & r);
@@ -135,6 +135,7 @@ template<class Y> weak_ptr(weak_ptr<Y> const & r);
weak_ptr; otherwise, constructs a weak_ptr that shares ownership with r as if by storing a copy of the pointer stored in r.

+

Postconditions: use_count() == r.use_count().

Throws: nothing.

destructor

@@ -244,7 +245,8 @@ public: } }; -


+


+


$Date$

Copyright 1999 Greg Colvin and Beman Dawes. Copyright 2002 Darin Adler. diff --git a/weak_ptr_test.cpp b/weak_ptr_test.cpp index 7628dc9..8f76d61 100644 --- a/weak_ptr_test.cpp +++ b/weak_ptr_test.cpp @@ -9,7 +9,7 @@ // // weak_ptr_test.cpp // -// Copyright (c) 2002 Peter Dimov +// Copyright (c) 2002, 2003 Peter Dimov // // Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. @@ -88,10 +88,10 @@ void shared_ptr_constructor() boost::shared_ptr sp; boost::weak_ptr wp(sp); - BOOST_TEST(wp.use_count() == 0); + BOOST_TEST(wp.use_count() == sp.use_count()); boost::weak_ptr wp2(sp); - BOOST_TEST(wp2.use_count() == 0); + BOOST_TEST(wp2.use_count() == sp.use_count()); } { @@ -99,6 +99,7 @@ void shared_ptr_constructor() { boost::weak_ptr wp(sp); + BOOST_TEST(wp.use_count() == sp.use_count()); BOOST_TEST(wp.use_count() == 1); boost::shared_ptr sp2(wp); BOOST_TEST(wp.use_count() == 2); @@ -107,6 +108,7 @@ void shared_ptr_constructor() { boost::weak_ptr wp(sp); + BOOST_TEST(wp.use_count() == sp.use_count()); BOOST_TEST(wp.use_count() == 1); boost::shared_ptr sp2(wp); BOOST_TEST(wp.use_count() == 2); @@ -119,6 +121,7 @@ void shared_ptr_constructor() { boost::weak_ptr wp(sp); + BOOST_TEST(wp.use_count() == sp.use_count()); BOOST_TEST(wp.use_count() == 1); boost::shared_ptr sp2(wp); BOOST_TEST(wp.use_count() == 2); @@ -127,6 +130,7 @@ void shared_ptr_constructor() { boost::weak_ptr wp(sp); + BOOST_TEST(wp.use_count() == sp.use_count()); BOOST_TEST(wp.use_count() == 1); boost::shared_ptr sp2(wp); BOOST_TEST(wp.use_count() == 2); @@ -138,13 +142,14 @@ void shared_ptr_constructor() boost::shared_ptr sp; boost::weak_ptr wp(sp); - BOOST_TEST(wp.use_count() == 0); + BOOST_TEST(wp.use_count() == sp.use_count()); } { boost::shared_ptr sp(static_cast(0)); boost::weak_ptr wp(sp); + BOOST_TEST(wp.use_count() == sp.use_count()); BOOST_TEST(wp.use_count() == 1); boost::shared_ptr sp2(wp); BOOST_TEST(wp.use_count() == 2); @@ -155,6 +160,7 @@ void shared_ptr_constructor() boost::shared_ptr sp(new int); boost::weak_ptr wp(sp); + BOOST_TEST(wp.use_count() == sp.use_count()); BOOST_TEST(wp.use_count() == 1); boost::shared_ptr sp2(wp); BOOST_TEST(wp.use_count() == 2); @@ -165,10 +171,10 @@ void shared_ptr_constructor() boost::shared_ptr sp; boost::weak_ptr wp(sp); - BOOST_TEST(wp.use_count() == 0); + BOOST_TEST(wp.use_count() == sp.use_count()); boost::weak_ptr wp2(sp); - BOOST_TEST(wp2.use_count() == 0); + BOOST_TEST(wp2.use_count() == sp.use_count()); } { @@ -176,6 +182,7 @@ void shared_ptr_constructor() { boost::weak_ptr wp(sp); + BOOST_TEST(wp.use_count() == sp.use_count()); BOOST_TEST(wp.use_count() == 1); boost::shared_ptr sp2(wp); BOOST_TEST(wp.use_count() == 2); @@ -184,6 +191,7 @@ void shared_ptr_constructor() { boost::weak_ptr wp(sp); + BOOST_TEST(wp.use_count() == sp.use_count()); BOOST_TEST(wp.use_count() == 1); boost::shared_ptr sp2(wp); BOOST_TEST(wp.use_count() == 2); @@ -195,6 +203,7 @@ void shared_ptr_constructor() boost::shared_ptr sp = create_incomplete(); boost::weak_ptr wp(sp); + BOOST_TEST(wp.use_count() == sp.use_count()); BOOST_TEST(wp.use_count() == 1); boost::shared_ptr sp2(wp); BOOST_TEST(wp.use_count() == 2); @@ -207,18 +216,21 @@ void copy_constructor() { boost::weak_ptr wp; boost::weak_ptr wp2(wp); + BOOST_TEST(wp2.use_count() == wp.use_count()); BOOST_TEST(wp2.use_count() == 0); } { boost::weak_ptr wp; boost::weak_ptr wp2(wp); + BOOST_TEST(wp2.use_count() == wp.use_count()); BOOST_TEST(wp2.use_count() == 0); } { boost::weak_ptr wp; boost::weak_ptr wp2(wp); + BOOST_TEST(wp2.use_count() == wp.use_count()); BOOST_TEST(wp2.use_count() == 0); } @@ -227,6 +239,7 @@ void copy_constructor() boost::weak_ptr wp(sp); boost::weak_ptr wp2(wp); + BOOST_TEST(wp2.use_count() == wp.use_count()); BOOST_TEST(wp2.use_count() == 1); BOOST_TEST(!(wp < wp2 || wp2 < wp)); @@ -234,6 +247,7 @@ void copy_constructor() BOOST_TEST(!(wp < wp2 || wp2 < wp)); boost::weak_ptr wp3(wp); + BOOST_TEST(wp3.use_count() == wp.use_count()); BOOST_TEST(wp3.use_count() == 0); BOOST_TEST(!(wp < wp3 || wp3 < wp)); } @@ -243,6 +257,7 @@ void copy_constructor() boost::weak_ptr wp(sp); boost::weak_ptr wp2(wp); + BOOST_TEST(wp2.use_count() == wp.use_count()); BOOST_TEST(wp2.use_count() == 1); BOOST_TEST(!(wp < wp2 || wp2 < wp)); @@ -250,6 +265,7 @@ void copy_constructor() BOOST_TEST(!(wp < wp2 || wp2 < wp)); boost::weak_ptr wp3(wp); + BOOST_TEST(wp3.use_count() == wp.use_count()); BOOST_TEST(wp3.use_count() == 0); BOOST_TEST(!(wp < wp3 || wp3 < wp)); } @@ -259,6 +275,7 @@ void copy_constructor() boost::weak_ptr wp(sp); boost::weak_ptr wp2(wp); + BOOST_TEST(wp2.use_count() == wp.use_count()); BOOST_TEST(wp2.use_count() == 1); BOOST_TEST(!(wp < wp2 || wp2 < wp)); @@ -266,6 +283,7 @@ void copy_constructor() BOOST_TEST(!(wp < wp2 || wp2 < wp)); boost::weak_ptr wp3(wp); + BOOST_TEST(wp3.use_count() == wp.use_count()); BOOST_TEST(wp3.use_count() == 0); BOOST_TEST(!(wp < wp3 || wp3 < wp)); } @@ -275,6 +293,7 @@ void copy_constructor() boost::weak_ptr wp(sp); boost::weak_ptr wp2(wp); + BOOST_TEST(wp2.use_count() == wp.use_count()); BOOST_TEST(wp2.use_count() == 1); BOOST_TEST(!(wp < wp2 || wp2 < wp)); @@ -282,6 +301,7 @@ void copy_constructor() BOOST_TEST(!(wp < wp2 || wp2 < wp)); boost::weak_ptr wp3(wp); + BOOST_TEST(wp3.use_count() == wp.use_count()); BOOST_TEST(wp3.use_count() == 0); BOOST_TEST(!(wp < wp3 || wp3 < wp)); } @@ -291,6 +311,7 @@ void copy_constructor() boost::weak_ptr wp(sp); boost::weak_ptr wp2(wp); + BOOST_TEST(wp2.use_count() == wp.use_count()); BOOST_TEST(wp2.use_count() == 1); BOOST_TEST(!(wp < wp2 || wp2 < wp)); @@ -298,6 +319,7 @@ void copy_constructor() BOOST_TEST(!(wp < wp2 || wp2 < wp)); boost::weak_ptr wp3(wp); + BOOST_TEST(wp3.use_count() == wp.use_count()); BOOST_TEST(wp3.use_count() == 0); BOOST_TEST(!(wp < wp3 || wp3 < wp)); } @@ -308,12 +330,14 @@ void conversion_constructor() { boost::weak_ptr wp; boost::weak_ptr wp2(wp); + BOOST_TEST(wp2.use_count() == wp.use_count()); BOOST_TEST(wp2.use_count() == 0); } { boost::weak_ptr wp; boost::weak_ptr wp2(wp); + BOOST_TEST(wp2.use_count() == wp.use_count()); BOOST_TEST(wp2.use_count() == 0); } @@ -321,9 +345,11 @@ void conversion_constructor() boost::weak_ptr wp; boost::weak_ptr wp2(wp); + BOOST_TEST(wp2.use_count() == wp.use_count()); BOOST_TEST(wp2.use_count() == 0); boost::weak_ptr wp3(wp); + BOOST_TEST(wp3.use_count() == wp.use_count()); BOOST_TEST(wp3.use_count() == 0); } @@ -332,6 +358,7 @@ void conversion_constructor() boost::weak_ptr wp(sp); boost::weak_ptr wp2(wp); + BOOST_TEST(wp2.use_count() == wp.use_count()); BOOST_TEST(wp2.use_count() == 1); BOOST_TEST(!(wp < wp2 || wp2 < wp)); @@ -339,6 +366,7 @@ void conversion_constructor() BOOST_TEST(!(wp < wp2 || wp2 < wp)); boost::weak_ptr wp3(wp); + BOOST_TEST(wp3.use_count() == wp.use_count()); BOOST_TEST(wp3.use_count() == 0); BOOST_TEST(!(wp < wp3 || wp3 < wp)); } @@ -348,6 +376,7 @@ void conversion_constructor() boost::weak_ptr wp(sp); boost::weak_ptr wp2(wp); + BOOST_TEST(wp2.use_count() == wp.use_count()); BOOST_TEST(wp2.use_count() == 1); BOOST_TEST(!(wp < wp2 || wp2 < wp)); @@ -355,6 +384,7 @@ void conversion_constructor() BOOST_TEST(!(wp < wp2 || wp2 < wp)); boost::weak_ptr wp3(wp); + BOOST_TEST(wp3.use_count() == wp.use_count()); BOOST_TEST(wp3.use_count() == 0); BOOST_TEST(!(wp < wp3 || wp3 < wp)); } @@ -364,6 +394,7 @@ void conversion_constructor() boost::weak_ptr wp(sp); boost::weak_ptr wp2(wp); + BOOST_TEST(wp2.use_count() == wp.use_count()); BOOST_TEST(wp2.use_count() == 1); BOOST_TEST(!(wp < wp2 || wp2 < wp)); @@ -371,6 +402,7 @@ void conversion_constructor() BOOST_TEST(!(wp < wp2 || wp2 < wp)); boost::weak_ptr wp3(wp); + BOOST_TEST(wp3.use_count() == wp.use_count()); BOOST_TEST(wp3.use_count() == 0); BOOST_TEST(!(wp < wp3 || wp3 < wp)); } @@ -380,6 +412,7 @@ void conversion_constructor() boost::weak_ptr wp(sp); boost::weak_ptr wp2(wp); + BOOST_TEST(wp2.use_count() == wp.use_count()); BOOST_TEST(wp2.use_count() == 1); BOOST_TEST(!(wp < wp2 || wp2 < wp)); @@ -387,6 +420,7 @@ void conversion_constructor() BOOST_TEST(!(wp < wp2 || wp2 < wp)); boost::weak_ptr wp3(wp); + BOOST_TEST(wp3.use_count() == wp.use_count()); BOOST_TEST(wp3.use_count() == 0); BOOST_TEST(!(wp < wp3 || wp3 < wp)); } @@ -396,6 +430,7 @@ void conversion_constructor() boost::weak_ptr wp(sp); boost::weak_ptr wp2(wp); + BOOST_TEST(wp2.use_count() == wp.use_count()); BOOST_TEST(wp2.use_count() == 1); BOOST_TEST(!(wp < wp2 || wp2 < wp)); @@ -403,6 +438,7 @@ void conversion_constructor() BOOST_TEST(!(wp < wp2 || wp2 < wp)); boost::weak_ptr wp3(wp); + BOOST_TEST(wp3.use_count() == wp.use_count()); BOOST_TEST(wp3.use_count() == 0); BOOST_TEST(!(wp < wp3 || wp3 < wp)); } @@ -412,6 +448,7 @@ void conversion_constructor() boost::weak_ptr wp(sp); boost::weak_ptr wp2(wp); + BOOST_TEST(wp2.use_count() == wp.use_count()); BOOST_TEST(wp2.use_count() == 1); BOOST_TEST(!(wp < wp2 || wp2 < wp)); @@ -419,6 +456,7 @@ void conversion_constructor() BOOST_TEST(!(wp < wp2 || wp2 < wp)); boost::weak_ptr wp3(wp); + BOOST_TEST(wp3.use_count() == wp.use_count()); BOOST_TEST(wp3.use_count() == 0); BOOST_TEST(!(wp < wp3 || wp3 < wp)); } @@ -428,6 +466,7 @@ void conversion_constructor() boost::weak_ptr wp(sp); boost::weak_ptr wp2(wp); + BOOST_TEST(wp2.use_count() == wp.use_count()); BOOST_TEST(wp2.use_count() == 1); BOOST_TEST(!(wp < wp2 || wp2 < wp)); @@ -435,6 +474,7 @@ void conversion_constructor() BOOST_TEST(!(wp < wp2 || wp2 < wp)); boost::weak_ptr wp3(wp); + BOOST_TEST(wp3.use_count() == wp.use_count()); BOOST_TEST(wp3.use_count() == 0); BOOST_TEST(!(wp < wp3 || wp3 < wp)); }