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
15int main()
16{
17}
18
19#else
20
21#include <boost/shared_ptr.hpp>
22#include <boost/core/lightweight_test.hpp>
23#include <memory>
24
25struct 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
44private:
45
46 X( X const & );
47 X & operator=( X const & );
48};
49
50long X::instances = 0;
51
52int 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

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