1//
2// shared_ptr_rv_test.cpp
3//
4// Copyright (c) 2007 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#include <boost/shared_ptr.hpp>
12#include <boost/core/lightweight_test.hpp>
13
14struct X
15{
16 static long instances;
17
18 X()
19 {
20 ++instances;
21 }
22
23 ~X()
24 {
25 --instances;
26 }
27
28 static boost::shared_ptr<X> create()
29 {
30 return boost::shared_ptr<X>( new X );
31 }
32
33private:
34
35 X( X const & );
36 X & operator=( X const & );
37};
38
39long X::instances = 0;
40
41int main()
42{
43 BOOST_TEST( X::instances == 0 );
44
45 {
46 boost::shared_ptr<X> p( X::create() );
47 BOOST_TEST( X::instances == 1 );
48
49 p = X::create();
50 BOOST_TEST( X::instances == 1 );
51
52 p.reset();
53 BOOST_TEST( X::instances == 0 );
54
55 p = X::create();
56 BOOST_TEST( X::instances == 1 );
57 }
58
59 BOOST_TEST( X::instances == 0 );
60
61 {
62 boost::shared_ptr<X const> p( X::create() );
63 BOOST_TEST( X::instances == 1 );
64
65 p = X::create();
66 BOOST_TEST( X::instances == 1 );
67
68 p.reset();
69 BOOST_TEST( X::instances == 0 );
70
71 p = X::create();
72 BOOST_TEST( X::instances == 1 );
73 }
74
75 BOOST_TEST( X::instances == 0 );
76
77 {
78 boost::shared_ptr<void> p( X::create() );
79 BOOST_TEST( X::instances == 1 );
80
81 p = X::create();
82 BOOST_TEST( X::instances == 1 );
83
84 p.reset();
85 BOOST_TEST( X::instances == 0 );
86
87 p = X::create();
88 BOOST_TEST( X::instances == 1 );
89 }
90
91 BOOST_TEST( X::instances == 0 );
92
93 {
94 boost::shared_ptr<void const> p( X::create() );
95 BOOST_TEST( X::instances == 1 );
96
97 p = X::create();
98 BOOST_TEST( X::instances == 1 );
99
100 p.reset();
101 BOOST_TEST( X::instances == 0 );
102
103 p = X::create();
104 BOOST_TEST( X::instances == 1 );
105 }
106
107 BOOST_TEST( X::instances == 0 );
108
109 return boost::report_errors();
110}
111

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