/Src/Dependencies/Boost/libs/smart_ptr/test/shared_ptr_move_test.cpp

http://hadesmem.googlecode.com/ · C++ · 106 lines · 72 code · 25 blank · 9 comment · 21 complexity · 4dc842f471077aed92579600f07f4c62 MD5 · raw file

  1. //
  2. // shared_ptr_move_test.cpp
  3. //
  4. // Copyright (c) 2007 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. #include <boost/shared_ptr.hpp>
  11. #include <boost/detail/lightweight_test.hpp>
  12. #if defined( BOOST_HAS_RVALUE_REFS )
  13. struct X
  14. {
  15. static long instances;
  16. X()
  17. {
  18. ++instances;
  19. }
  20. ~X()
  21. {
  22. --instances;
  23. }
  24. private:
  25. X( X const & );
  26. X & operator=( X const & );
  27. };
  28. long X::instances = 0;
  29. int main()
  30. {
  31. BOOST_TEST( X::instances == 0 );
  32. {
  33. boost::shared_ptr<X> p( new X );
  34. BOOST_TEST( X::instances == 1 );
  35. boost::shared_ptr<X> p2( std::move( p ) );
  36. BOOST_TEST( X::instances == 1 );
  37. BOOST_TEST( p.get() == 0 );
  38. boost::shared_ptr<void> p3( std::move( p2 ) );
  39. BOOST_TEST( X::instances == 1 );
  40. BOOST_TEST( p2.get() == 0 );
  41. p3.reset();
  42. BOOST_TEST( X::instances == 0 );
  43. }
  44. {
  45. boost::shared_ptr<X> p( new X );
  46. BOOST_TEST( X::instances == 1 );
  47. boost::shared_ptr<X> p2;
  48. p2 = std::move( p );
  49. BOOST_TEST( X::instances == 1 );
  50. BOOST_TEST( p.get() == 0 );
  51. boost::shared_ptr<void> p3;
  52. p3 = std::move( p2 );
  53. BOOST_TEST( X::instances == 1 );
  54. BOOST_TEST( p2.get() == 0 );
  55. p3.reset();
  56. BOOST_TEST( X::instances == 0 );
  57. }
  58. {
  59. boost::shared_ptr<X> p( new X );
  60. BOOST_TEST( X::instances == 1 );
  61. boost::shared_ptr<X> p2( new X );
  62. BOOST_TEST( X::instances == 2 );
  63. p2 = std::move( p );
  64. BOOST_TEST( X::instances == 1 );
  65. BOOST_TEST( p.get() == 0 );
  66. boost::shared_ptr<void> p3( new X );
  67. BOOST_TEST( X::instances == 2 );
  68. p3 = std::move( p2 );
  69. BOOST_TEST( X::instances == 1 );
  70. BOOST_TEST( p2.get() == 0 );
  71. p3.reset();
  72. BOOST_TEST( X::instances == 0 );
  73. }
  74. return boost::report_errors();
  75. }
  76. #else // !defined( BOOST_HAS_RVALUE_REFS )
  77. int main()
  78. {
  79. return 0;
  80. }
  81. #endif