文档介绍:踏雪无痕
SGI STL空间配置器(STL源码剖析)
分类: C++ 2012-07-20 13:40 149人阅读评论(0) 收藏举报
空间配置器的标准接口(根据STL规范)
 
allocator::value_type
allocator::pointer
allocator::const_pointer
allocator::reference
allocator::const_reference
allocator::size_type
allocator::difference_type
allocator::rebind //一个嵌套的类模板
allocator::allocator()
allocator::allocator(const allocator&)
template<class U> allocator::allocator(const allocator<U>&) //泛化的拷贝构造函数 
allocator::~allocator()
pointer allocator::address(reference x) const
//返回某个对象的地址.  (x) 等于 &x
const_pointer allocator::address(const_reference x) const
//同上. 返回一个const对象的地址
pointer allocator::allocate(size_type n, const void* = 0 )
//分配空间, 足以存储n个T对象
void allocator::deallocate(pointer p, size_type n)
//释放空间
size_type allocator::max_size() const
//返回可成功分配的最大量
void allocator::construct(pointer p , const T& x)
//负责构造 相当于 new ((const void*)p) T(x)
void allocator::destroy(pointer p)
//负责析构 相当于 p->~T()
 
——————————————————————————————————————
SGI STL 的配置器与众不同, 名称是alloc而不是allocator, 而且不接受任何参数。
 
vector<int , std::allocator<int> > iv;   //in VC or CB
vector<int , std::alloc > iv;                //in GCC
1
但是通常都是使用默认的空间配置器,而SGI STL已经为每一个容器都指定了缺省的空间配置器。所以使用的时候无
太大区别。
 
template<class T, class Alloc = alloc>
class vector {   };       //缺省使用alloc
 
———————————————————————————————————