Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <ext/mt_allocator.h>
- #include <cstdio>
- #include <new>
- #include <vector>
- template < typename T, typename A = std::allocator< T > >
- struct overload_new_delete
- {
- static A allocator;
- static void* operator new ( std::size_t size )
- {
- return allocator.allocate ( size );
- }
- static void* operator new ( std::size_t size, void* place )
- {
- return ::operator new ( size, place );
- }
- static void operator delete ( void* p, std::size_t size )
- {
- allocator.deallocate ( reinterpret_cast< T* >( p ), size );
- }
- static void operator delete ( void* p, void * place )
- {
- ::operator delete ( p, place );
- }
- static void* operator new [] ( std::size_t size )
- {
- return allocator.allocate ( size );
- }
- static void* operator new [] ( std::size_t size, void* place )
- {
- return ::operator new ( size, place );
- }
- static void operator delete [] ( void* p, std::size_t size )
- {
- allocator.deallocate ( reinterpret_cast< T* >( p ), size );
- }
- static void operator delete [] ( void* p, void* place )
- {
- ::operator delete ( p, place );
- }
- };
- template < typename T, typename A >
- A overload_new_delete< T, A >::allocator;
- struct X : overload_new_delete< X, __gnu_cxx::__mt_alloc< X > >
- {
- X( int i ) : i_( i ) { }
- int i_;
- };
- int main()
- {
- X* x1 = new X( 7 );
- std::printf( "x1 = %p, *x1 = %d\n", x1, x1->i_ );
- X* x2 = new X( 42 );
- std::printf( "x2 = %p, *x2 = %d\n", x2, x2->i_ );
- delete x1;
- delete x2;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement