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