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