// // shared_ptr_rv_test.cpp // // Copyright (c) 2007 Peter Dimov // // Distributed under the Boost Software License, Version 1.0. // See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt // #include #include struct X { static long instances; X() { ++instances; } ~X() { --instances; } static boost::shared_ptr create() { return boost::shared_ptr( new X ); } private: X( X const & ); X & operator=( X const & ); }; long X::instances = 0; int main() { BOOST_TEST( X::instances == 0 ); { boost::shared_ptr p( X::create() ); BOOST_TEST( X::instances == 1 ); p = X::create(); BOOST_TEST( X::instances == 1 ); p.reset(); BOOST_TEST( X::instances == 0 ); p = X::create(); BOOST_TEST( X::instances == 1 ); } BOOST_TEST( X::instances == 0 ); { boost::shared_ptr p( X::create() ); BOOST_TEST( X::instances == 1 ); p = X::create(); BOOST_TEST( X::instances == 1 ); p.reset(); BOOST_TEST( X::instances == 0 ); p = X::create(); BOOST_TEST( X::instances == 1 ); } BOOST_TEST( X::instances == 0 ); { boost::shared_ptr p( X::create() ); BOOST_TEST( X::instances == 1 ); p = X::create(); BOOST_TEST( X::instances == 1 ); p.reset(); BOOST_TEST( X::instances == 0 ); p = X::create(); BOOST_TEST( X::instances == 1 ); } BOOST_TEST( X::instances == 0 ); { boost::shared_ptr p( X::create() ); BOOST_TEST( X::instances == 1 ); p = X::create(); BOOST_TEST( X::instances == 1 ); p.reset(); BOOST_TEST( X::instances == 0 ); p = X::create(); BOOST_TEST( X::instances == 1 ); } BOOST_TEST( X::instances == 0 ); return boost::report_errors(); }