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

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

本文简介:选择自 taodm 的 blog

    array<t, allocator>::~array()

    {

      if (first != last) {

        for (iterator i = first; i < last; ++i)

          allocator::destroy(i);

        allocator::deallocate(first, last - first);

      }

    }

    我们这个简单的array类不需要使用重绑定或转换,但这只是因为array<t, allocator>绝不产生t类型以外的对象。当你定义更复杂的数据结构时,其它类型就出现了。比如,考虑一下value_type是t的链表类list。链表通常是由节点组成的,每个节点含有一个t类型的对象和一个指向下个节点的指针。于是,作为最初的尝试,我们可能定义链表的节点为:

    template <class t>

    struct list_node

    {

      t val;

      list_node* next;

    };

    把一个新的值加入list的过程看起来可能是这样的:

l         使用一个value_type是list_node<t>的allocator,为一个新节点分配内存。

l         使用一个value_type是t的allocator,在节点的val位置上构建新的元素。

l         将这个节点连接到适当的位置。

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

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

go top