array(size_type n = 0,
const t& x = t(),
const allocator& a = allocator());
array(const array&);
~array();
array& operator=(const array&);
private:
typename allocator::pointer first;
typename allocator::pointer last;
};
如果要满足对容器的需求的话(需求全集见于c++标准§23.1,table 65),这还不是我们所要的全部样板,但是绝大部分都和allocator完全无关。对于我们的目的而言,最感兴趣的成员函数是构造函数(它分配内存和创建对象),和析构函数(它销毁内存并释放内存)。
构造函数初始化allocator基类,获得足够容纳n个元素的一块内存(如果我们正在写类似于vector的东西,我们可能申请更大些的内存以供增长用),然后遍历内存以创建初始化值的拷贝。唯一的问题是异常安全:如果某一个元素的构造函数抛出了一个异常,我们必须撤销我们所做的一切。
template <class t, class allocator>
array<t, allocator>::array(size_type n,
const t& x,
const allocator& a)
: allocator(a), first(0), last(0)
{
if (n != 0) {