vector容器的erase方法???????
SGI STL对vector容器的erase()方法是这样实现的。
iterator erase(iterator first, iterator last) {
iterator i = copy(last, finish, first);//移动删除区间后面的元素
destroy(i, finish);//调用容器内元素的析构函数
finish = finish - (last - first);
return first;
}
假如我们容器中的元素是一些指向类的指针,如Vector<Myclass *> MyClassVector;
而Myclass申请了堆内存,需要调用Myclass的析构函数释放内存。那么这时候我们调用MyClassVector
容器的erase(iterator first, iterator last)函数之前一定要先遍历这段区间取出容器中的元素,
调用元素的析构函数,否则会内存泄漏。
我觉得这个erase函数设计的是不是有问题呢?如果改成这样不是更好么?
iterator erase(iterator first, iterator last) {
destroy(i, finish);//调用容器内元素的析构函数,先释放掉不需要的元素的内存
iterator i = copy(last, finish, first);//移动删除区间后面的元素
finish = finish - (last - first);
return first;
}
请高人帮忙解惑为什么SGI STL要这样设计erase函数呢?