1 #include <boost/config.hpp>
2 
3 //  shared_ptr_alloc3_test.cpp
4 //
5 //  Copyright (c) 2005, 2014 Peter Dimov
6 //
7 //  Distributed under the Boost Software License, Version 1.0.
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/detail/lightweight_test.hpp>
13 #include <boost/shared_ptr.hpp>
14 #include <memory>
15 #include <cstddef>
16 
17 //
18 
19 struct D;
20 
21 struct X
22 {
23     static int instances;
24 
XX25     X(): deleted_( false )
26     {
27         ++instances;
28     }
29 
~XX30     ~X()
31     {
32         BOOST_TEST( deleted_ );
33         --instances;
34     }
35 
36 private:
37 
38     friend struct D;
39 
40     bool deleted_;
41 
42     X( X const & );
43     X & operator=( X const & );
44 };
45 
46 int X::instances = 0;
47 
48 struct D
49 {
operator ()D50     void operator()( X * px ) const
51     {
52         px->deleted_ = true;
53         delete px;
54     }
55 };
56 
main()57 int main()
58 {
59     BOOST_TEST( X::instances == 0 );
60 
61     boost::shared_ptr<void> pv( new X, D(), std::allocator<X>() );
62 
63     BOOST_TEST( X::instances == 1 );
64 
65     pv.reset();
66 
67     BOOST_TEST( X::instances == 0 );
68 
69     pv.reset( new X, D(), std::allocator<void>() );
70 
71     BOOST_TEST( X::instances == 1 );
72 
73     pv.reset();
74 
75     BOOST_TEST( X::instances == 0 );
76 
77     return boost::report_errors();
78 }
79