weak_from_raw_test4.cpp 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. //
  2. // weak_from_raw_test4.cpp
  3. //
  4. // As weak_from_raw_test2.cpp, but uses weak_from_raw
  5. // in the constructor
  6. //
  7. // Copyright (c) 2014, 2015 Peter Dimov
  8. //
  9. // Distributed under the Boost Software License, Version 1.0.
  10. //
  11. // See accompanying file LICENSE_1_0.txt or copy at
  12. // http://www.boost.org/LICENSE_1_0.txt
  13. //
  14. #include <boost/smart_ptr/enable_shared_from_raw.hpp>
  15. #include <boost/weak_ptr.hpp>
  16. #include <boost/core/lightweight_test.hpp>
  17. class X;
  18. static boost::weak_ptr< X > r_;
  19. void register_( boost::weak_ptr< X > const & r )
  20. {
  21. r_ = r;
  22. }
  23. void check_( boost::weak_ptr< X > const & r )
  24. {
  25. BOOST_TEST( !( r < r_ ) && !( r_ < r ) );
  26. }
  27. void unregister_( boost::weak_ptr< X > const & r )
  28. {
  29. BOOST_TEST( !( r < r_ ) && !( r_ < r ) );
  30. r_.reset();
  31. }
  32. class X: public boost::enable_shared_from_raw
  33. {
  34. public:
  35. X()
  36. {
  37. register_( boost::weak_from_raw( this ) );
  38. }
  39. ~X()
  40. {
  41. unregister_( boost::weak_from_raw( this ) );
  42. }
  43. void check()
  44. {
  45. check_( boost::weak_from_raw( this ) );
  46. }
  47. };
  48. int main()
  49. {
  50. {
  51. boost::shared_ptr< X > px( new X );
  52. px->check();
  53. }
  54. return boost::report_errors();
  55. }