sp_recursive_assign_rv_test.cpp 1.6 KB

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