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
15class X
16{
17private:
18
19 X( X const & );
20 X & operator=( X const & );
21
22public:
23
24 static int instances;
25
26 X()
27 {
28 ++instances;
29 }
30
31 ~X()
32 {
33 --instances;
34 }
35};
36
37int X::instances = 0;
38
39int 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

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