CUJ:标准库:Allocator能做什么?[10]

[入库:2005年8月18日] [更新:2007年3月24日]

本文简介:选择自 taodm 的 blog

      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) {

本文关键:CUJ、allocator、STL、Matt Austern
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top