shared_ptr_alloc3_test.cpp 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. #include <boost/config.hpp>
  2. // shared_ptr_alloc3_test.cpp
  3. //
  4. // Copyright (c) 2005, 2014 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. #include <boost/detail/lightweight_test.hpp>
  10. #include <boost/shared_ptr.hpp>
  11. #include <memory>
  12. #include <cstddef>
  13. //
  14. struct D;
  15. struct X
  16. {
  17. static int instances;
  18. X(): deleted_( false )
  19. {
  20. ++instances;
  21. }
  22. ~X()
  23. {
  24. BOOST_TEST( deleted_ );
  25. --instances;
  26. }
  27. private:
  28. friend struct D;
  29. bool deleted_;
  30. X( X const & );
  31. X & operator=( X const & );
  32. };
  33. int X::instances = 0;
  34. struct D
  35. {
  36. void operator()( X * px ) const
  37. {
  38. px->deleted_ = true;
  39. delete px;
  40. }
  41. };
  42. int main()
  43. {
  44. BOOST_TEST( X::instances == 0 );
  45. boost::shared_ptr<void> pv( new X, D(), std::allocator<X>() );
  46. BOOST_TEST( X::instances == 1 );
  47. pv.reset();
  48. BOOST_TEST( X::instances == 0 );
  49. pv.reset( new X, D(), std::allocator<void>() );
  50. BOOST_TEST( X::instances == 1 );
  51. pv.reset();
  52. BOOST_TEST( X::instances == 0 );
  53. return boost::report_errors();
  54. }