1 2 // weak_from_test2.cpp 3 // 4 // Tests weak_from in a destructor 5 // 6 // Copyright 2014, 2015, 2019 Peter Dimov 7 // 8 // Distributed under the Boost Software License, Version 1.0. 9 // http://www.boost.org/LICENSE_1_0.txt 10 11 #include <boost/smart_ptr/enable_shared_from.hpp> 12 #include <boost/weak_ptr.hpp> 13 #include <boost/core/lightweight_test.hpp> 14 15 class X: public boost::enable_shared_from 16 { 17 private: 18 19 boost::weak_ptr<X> px_; 20 21 public: 22 X()23 X() 24 { 25 boost::weak_ptr<X> p1 = weak_from( this ); 26 BOOST_TEST( p1._empty() ); 27 BOOST_TEST( p1.expired() ); 28 } 29 check()30 void check() 31 { 32 boost::weak_ptr<X> p2 = weak_from( this ); 33 BOOST_TEST( !p2.expired() ); 34 35 BOOST_TEST( p2.lock().get() == this ); 36 37 px_ = p2; 38 } 39 ~X()40 ~X() 41 { 42 boost::weak_ptr<X> p3 = weak_from( this ); 43 BOOST_TEST( p3.expired() ); 44 45 BOOST_TEST( !(px_ < p3) && !(p3 < px_) ); 46 } 47 }; 48 main()49int main() 50 { 51 { 52 boost::shared_ptr< X > px( new X ); 53 px->check(); 54 } 55 56 return boost::report_errors(); 57 } 58