STL自定义分配器

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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值