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