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