1 | // |
---|---|
2 | // sp_recursive_assign_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 | |
17 | class X |
18 | { |
19 | public: |
20 | |
21 | static int instances; |
22 | |
23 | X() |
24 | { |
25 | ++instances; |
26 | } |
27 | |
28 | ~X() |
29 | { |
30 | --instances; |
31 | } |
32 | |
33 | private: |
34 | |
35 | X( X const& ); |
36 | }; |
37 | |
38 | int X::instances = 0; |
39 | |
40 | class Y |
41 | { |
42 | public: |
43 | |
44 | static int instances; |
45 | |
46 | Y() |
47 | { |
48 | ++instances; |
49 | } |
50 | |
51 | ~Y() |
52 | { |
53 | --instances; |
54 | } |
55 | |
56 | private: |
57 | |
58 | Y( Y const& ); |
59 | }; |
60 | |
61 | int Y::instances = 0; |
62 | |
63 | static boost::shared_ptr<void> s_pv; |
64 | |
65 | class Z |
66 | { |
67 | public: |
68 | |
69 | static int instances; |
70 | |
71 | Z() |
72 | { |
73 | ++instances; |
74 | } |
75 | |
76 | ~Z() |
77 | { |
78 | --instances; |
79 | s_pv = boost::shared_ptr<void>( new Y ); |
80 | } |
81 | |
82 | private: |
83 | |
84 | Z( Z const& ); |
85 | }; |
86 | |
87 | int Z::instances = 0; |
88 | |
89 | int 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<void>( 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<void>( 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<void>(); |
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 |