void Vec<T>::grow() { //when growing ,allocate twice as much space as currently in use //策略,每次分配时,都分配双倍的空间,当然vec当前可能为空,因为我们可以选择一个元素的空间和已有空间的2倍来比较大小。 //由于max的2个参数必须类型相同,所有我们显式构造了ptr_diff(1) size_type new_size=max(2*(limit-data),ptrdiff_t(1)); /** 我们首先把要分配多少元素的空间保存在new_size中,接下来分配适当大小的空间,并且调用uninitialze_copy把当前空间的元素,复制到新 空间中,然后调用uncreate函数来释放原先的内存,最后我们重新设置指针的值。 **/ iterator new_data=alloc.allocate(new_size); iterator new_avail=uninitialized_copy(data,avail,new_data); uncreate(); //reset pointer data=new_data; avail=new_avail; limit=data+new_size; }
~vec() { uncreate(); }
void vec<T>::clear() { uncreate(); // start from scratch }
~Vec() { uncreate(); }