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 将这个节点连接到适当的位置。