// // weak_from_this_test2.cpp // // Tests weak_from_this in a destructor // // Copyright (c) 2014, 2015 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 #include class X: public boost::enable_shared_from_this< X > { private: boost::weak_ptr px_; public: X() { boost::weak_ptr p1 = weak_from_this(); BOOST_TEST( p1._empty() ); BOOST_TEST( p1.expired() ); } void check() { boost::weak_ptr p2 = weak_from_this(); BOOST_TEST( !p2.expired() ); BOOST_TEST( p2.lock().get() == this ); px_ = p2; } ~X() { boost::weak_ptr p3 = weak_from_this(); BOOST_TEST( p3.expired() ); BOOST_TEST( !(px_ < p3) && !(p3 < px_) ); } }; int main() { { boost::shared_ptr< X > px( new X ); px->check(); } return boost::report_errors(); }