1 //
2 // quick.cpp - a quick (CI) test for Boost.SmartPtr
3 //
4 // Copyright 2017 Peter Dimov
5 //
6 // Distributed under the Boost Software License, Version 1.0.
7 //
8 // See accompanying file LICENSE_1_0.txt or copy at
9 // http://www.boost.org/LICENSE_1_0.txt
10 //
11
12 #include <boost/smart_ptr.hpp>
13 #include <boost/core/lightweight_test.hpp>
14
15 class X
16 {
17 private:
18
19 X( X const & );
20 X & operator=( X const & );
21
22 public:
23
24 static int instances;
25
X()26 X()
27 {
28 ++instances;
29 }
30
~X()31 ~X()
32 {
33 --instances;
34 }
35 };
36
37 int X::instances = 0;
38
main()39 int main()
40 {
41 {
42 boost::shared_ptr<X> p1( new X );
43 BOOST_TEST_EQ( X::instances, 1 );
44 BOOST_TEST_EQ( p1.use_count(), 1 );
45
46 boost::shared_ptr<X> p2( p1 );
47 BOOST_TEST_EQ( p2.use_count(), 2 );
48
49 boost::weak_ptr<X> wp( p1 );
50 BOOST_TEST_EQ( wp.use_count(), 2 );
51
52 p1.reset();
53 BOOST_TEST_EQ( wp.use_count(), 1 );
54
55 p2.reset();
56 BOOST_TEST_EQ( wp.use_count(), 0 );
57 BOOST_TEST_EQ( X::instances, 0 );
58 }
59
60 {
61 boost::shared_ptr<X> p1 = boost::make_shared<X>();
62 BOOST_TEST_EQ( X::instances, 1 );
63 BOOST_TEST_EQ( p1.use_count(), 1 );
64
65 boost::shared_ptr<X> p2( p1 );
66 BOOST_TEST_EQ( p2.use_count(), 2 );
67
68 boost::weak_ptr<X> wp( p1 );
69 BOOST_TEST_EQ( wp.use_count(), 2 );
70
71 p1.reset();
72 BOOST_TEST_EQ( wp.use_count(), 1 );
73
74 p2.reset();
75 BOOST_TEST_EQ( wp.use_count(), 0 );
76 BOOST_TEST_EQ( X::instances, 0 );
77 }
78
79 return boost::report_errors();
80 }
81