1 #include <boost/config.hpp> 2 3 // 4 // auto_ptr_rv_test.cpp 5 // 6 // Copyright (c) 2006 Peter Dimov 7 // 8 // Distributed under the Boost Software License, Version 1.0. 9 // See accompanying file LICENSE_1_0.txt or copy at 10 // http://www.boost.org/LICENSE_1_0.txt 11 // 12 13 #if defined( BOOST_NO_AUTO_PTR ) 14 main()15int main() 16 { 17 } 18 19 #else 20 21 #include <boost/shared_ptr.hpp> 22 #include <boost/detail/lightweight_test.hpp> 23 #include <memory> 24 25 struct X 26 { 27 static long instances; 28 XX29 X() 30 { 31 ++instances; 32 } 33 ~XX34 ~X() 35 { 36 --instances; 37 } 38 createX39 static std::auto_ptr<X> create() 40 { 41 return std::auto_ptr<X>( new X ); 42 } 43 44 private: 45 46 X( X const & ); 47 X & operator=( X const & ); 48 }; 49 50 long X::instances = 0; 51 main()52int main() 53 { 54 BOOST_TEST( X::instances == 0 ); 55 56 { 57 boost::shared_ptr<X> p( X::create() ); 58 BOOST_TEST( X::instances == 1 ); 59 60 p = X::create(); 61 BOOST_TEST( X::instances == 1 ); 62 63 p.reset(); 64 BOOST_TEST( X::instances == 0 ); 65 66 p = X::create(); 67 BOOST_TEST( X::instances == 1 ); 68 } 69 70 BOOST_TEST( X::instances == 0 ); 71 72 { 73 boost::shared_ptr<X const> p( X::create() ); 74 BOOST_TEST( X::instances == 1 ); 75 76 p = X::create(); 77 BOOST_TEST( X::instances == 1 ); 78 79 p.reset(); 80 BOOST_TEST( X::instances == 0 ); 81 82 p = X::create(); 83 BOOST_TEST( X::instances == 1 ); 84 } 85 86 BOOST_TEST( X::instances == 0 ); 87 88 { 89 boost::shared_ptr<void> p( X::create() ); 90 BOOST_TEST( X::instances == 1 ); 91 92 p = X::create(); 93 BOOST_TEST( X::instances == 1 ); 94 95 p.reset(); 96 BOOST_TEST( X::instances == 0 ); 97 98 p = X::create(); 99 BOOST_TEST( X::instances == 1 ); 100 } 101 102 BOOST_TEST( X::instances == 0 ); 103 104 { 105 boost::shared_ptr<void const> p( X::create() ); 106 BOOST_TEST( X::instances == 1 ); 107 108 p = X::create(); 109 BOOST_TEST( X::instances == 1 ); 110 111 p.reset(); 112 BOOST_TEST( X::instances == 0 ); 113 114 p = X::create(); 115 BOOST_TEST( X::instances == 1 ); 116 } 117 118 BOOST_TEST( X::instances == 0 ); 119 120 return boost::report_errors(); 121 } 122 123 #endif // #if defined( BOOST_NO_AUTO_PTR ) 124