template<typename T>
class crAllocator {
public:
typedef T value_type;
typedef size_t size_type;
typedef ptrdiff_t difference_type;
typedef T* pointer;
typedef const T* const_pointer;
typedef T& reference;
typedef const T& const_reference;
pointer address( reference r ) const {
return &r;
}
const_pointer address( const_reference r ) const {
return &r;
}
crAllocator() throw() {}
template<class U>
crAllocator( const crAllocator<U>& ) throw() {}
~crAllocator() throw() {}
pointer allocate( size_type n, allocator<void>::const_pointer hint = 0 ) {
// 调用其它的分配策略来分配内存
return static_cast<T*>( malloc( n * sizeof( T ) ) );
}
void deallocate( pointer p, size_type n ) {
// 调用其它的分配策略来释放内存
free( p );
}
void construct(pointer p, const T& val) {
new ( p ) T( val );
}
void destroy(pointer p) {
p->~T();
}
size_type max_size() const throw() {
return std::numeric_limits<size_type>::max() / sizeof( T );
}
template<class U>
struct rebind {
typedef crAllocator<U> other;
};
};
vector<cCar, crAllocator<cCar> > test;