shared_ptr_rv_test.cpp 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. //
  2. // shared_ptr_rv_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. struct X
  13. {
  14. static long instances;
  15. X()
  16. {
  17. ++instances;
  18. }
  19. ~X()
  20. {
  21. --instances;
  22. }
  23. static boost::shared_ptr<X> create()
  24. {
  25. return boost::shared_ptr<X>( new X );
  26. }
  27. private:
  28. X( X const & );
  29. X & operator=( X const & );
  30. };
  31. long X::instances = 0;
  32. int main()
  33. {
  34. BOOST_TEST( X::instances == 0 );
  35. {
  36. boost::shared_ptr<X> p( X::create() );
  37. BOOST_TEST( X::instances == 1 );
  38. p = X::create();
  39. BOOST_TEST( X::instances == 1 );
  40. p.reset();
  41. BOOST_TEST( X::instances == 0 );
  42. p = X::create();
  43. BOOST_TEST( X::instances == 1 );
  44. }
  45. BOOST_TEST( X::instances == 0 );
  46. {
  47. boost::shared_ptr<X const> p( X::create() );
  48. BOOST_TEST( X::instances == 1 );
  49. p = X::create();
  50. BOOST_TEST( X::instances == 1 );
  51. p.reset();
  52. BOOST_TEST( X::instances == 0 );
  53. p = X::create();
  54. BOOST_TEST( X::instances == 1 );
  55. }
  56. BOOST_TEST( X::instances == 0 );
  57. {
  58. boost::shared_ptr<void> p( X::create() );
  59. BOOST_TEST( X::instances == 1 );
  60. p = X::create();
  61. BOOST_TEST( X::instances == 1 );
  62. p.reset();
  63. BOOST_TEST( X::instances == 0 );
  64. p = X::create();
  65. BOOST_TEST( X::instances == 1 );
  66. }
  67. BOOST_TEST( X::instances == 0 );
  68. {
  69. boost::shared_ptr<void const> p( X::create() );
  70. BOOST_TEST( X::instances == 1 );
  71. p = X::create();
  72. BOOST_TEST( X::instances == 1 );
  73. p.reset();
  74. BOOST_TEST( X::instances == 0 );
  75. p = X::create();
  76. BOOST_TEST( X::instances == 1 );
  77. }
  78. BOOST_TEST( X::instances == 0 );
  79. return boost::report_errors();
  80. }