1//
2// sp_recursive_assign2_rv_test.cpp
3//
4// Copyright 2009 Peter Dimov
5//
6// Distributed under the Boost Software License, Version 1.0.
7// See accompanying file LICENSE_1_0.txt or copy at
8// http://www.boost.org/LICENSE_1_0.txt
9//
10
11
12#include <boost/shared_ptr.hpp>
13#include <boost/core/lightweight_test.hpp>
14
15//
16
17class X
18{
19public:
20
21 static int instances;
22
23 X()
24 {
25 ++instances;
26 }
27
28 ~X()
29 {
30 --instances;
31 }
32
33private:
34
35 X( X const& );
36};
37
38int X::instances = 0;
39
40class Y
41{
42public:
43
44 static int instances;
45
46 Y()
47 {
48 ++instances;
49 }
50
51 ~Y()
52 {
53 --instances;
54 }
55
56private:
57
58 Y( Y const& );
59};
60
61int Y::instances = 0;
62
63static boost::shared_ptr<void> s_pv;
64
65class Z
66{
67public:
68
69 static int instances;
70
71 Z()
72 {
73 ++instances;
74 }
75
76 ~Z()
77 {
78 --instances;
79 s_pv = boost::shared_ptr<Y>( new Y );
80 }
81
82private:
83
84 Z( Z const& );
85};
86
87int Z::instances = 0;
88
89int main()
90{
91 BOOST_TEST( X::instances == 0 );
92 BOOST_TEST( Y::instances == 0 );
93 BOOST_TEST( Z::instances == 0 );
94
95 s_pv = boost::shared_ptr<Z>( new Z );
96
97 BOOST_TEST( X::instances == 0 );
98 BOOST_TEST( Y::instances == 0 );
99 BOOST_TEST( Z::instances == 1 );
100
101 s_pv = boost::shared_ptr<X>( new X );
102
103 BOOST_TEST( X::instances == 0 );
104 BOOST_TEST( Y::instances == 1 );
105 BOOST_TEST( Z::instances == 0 );
106
107 s_pv = boost::shared_ptr<Y>();
108
109 BOOST_TEST( X::instances == 0 );
110 BOOST_TEST( Y::instances == 0 );
111 BOOST_TEST( Z::instances == 0 );
112
113 return boost::report_errors();
114}
115

source code of boost/libs/smart_ptr/test/sp_recursive_assign2_rv_test.cpp