123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- #include <boost/config.hpp>
- // shared_ptr_alloc11_test.cpp
- //
- // Test the allocator constructor with a C++11 minimal allocator
- //
- // Copyright (c) 2005, 2014 Peter Dimov
- //
- // Distributed under the Boost Software License, Version 1.0.
- // See accompanying file LICENSE_1_0.txt or copy at
- // http://www.boost.org/LICENSE_1_0.txt
- #include <boost/detail/lightweight_test.hpp>
- #include <boost/shared_ptr.hpp>
- #include <memory>
- #include <cstddef>
- #if !defined( BOOST_NO_CXX11_ALLOCATOR )
- template< class T > class cxx11_allocator
- {
- public:
- typedef T value_type;
- cxx11_allocator()
- {
- }
- template< class Y > cxx11_allocator( cxx11_allocator<Y> const & )
- {
- }
- T * allocate( std::size_t n )
- {
- return static_cast< T* >( ::operator new( n * sizeof( T ) ) );
- }
- void deallocate( T * p, std::size_t n )
- {
- ::operator delete( p );
- }
- };
- //
- struct D;
- struct X
- {
- static int instances;
- X(): deleted_( false )
- {
- ++instances;
- }
- ~X()
- {
- BOOST_TEST( deleted_ );
- --instances;
- }
- private:
- friend struct D;
- bool deleted_;
- X( X const & );
- X & operator=( X const & );
- };
- int X::instances = 0;
- struct D
- {
- void operator()( X * px ) const
- {
- px->deleted_ = true;
- delete px;
- }
- };
- int main()
- {
- BOOST_TEST( X::instances == 0 );
- boost::shared_ptr<void> pv( new X, D(), cxx11_allocator<X>() );
- BOOST_TEST( X::instances == 1 );
- pv.reset();
- BOOST_TEST( X::instances == 0 );
- pv.reset( new X, D(), cxx11_allocator<void>() );
- BOOST_TEST( X::instances == 1 );
- pv.reset();
- BOOST_TEST( X::instances == 0 );
- return boost::report_errors();
- }
- #else // !defined( BOOST_NO_CXX11_ALLOCATOR )
- int main()
- {
- return 0;
- }
- #endif
|