迭代时删除指针向量的最佳实践
Best practice for deleting vector of pointers while iterating
当迭代指针的STL::vector时,在此过程中删除对象的最佳实践是什么?
我理解擦除-删除习语。但是由于vector包含指针,我担心这只会删除指针,而使实例在内存中徘徊。
例如,我会这样做
std::vector<someClass*> someClassList
std::vector<someClass*>::iterator i;
for (i=someClassList.begin(); i != someClassList.end(); ++i){
determine_if_should_be_deleted(i);
// <--How to delete the object and remove it from the vector without
// <--messing up the iterator?
}
如果使用new
创建每个实例,则
delete *i;
就可以了。因为没有从vector中移除指针,所以不会弄乱迭代,但是释放了所指向的内存。
一个更好的技术是使用std::unique_ptr
,然后std::vector
析构函数将负责释放内存。
相关文章:
- 选择和修改嵌套向量中的条目的最佳实践
- C++:实现向量和矩阵类的最佳结构
- C++:将向量传递到构造函数以创建成员变量的最佳方法?
- 在向量中查找大于 0(或通常为 k)的最小元素的最佳方法是什么?
- 从数组中删除非唯一值、保持顺序和不使用向量的最佳方法?
- 从列表/向量制作嵌套 for 循环的最佳方法是什么?
- 从整数向量向量搜索整数向量的最佳算法
- 查找字符串是否包含字符串向量的任何一个元素的最佳方法
- 将对象附加到智能指针向量的最佳方法
- 获得给定向量的排列索引列表的最佳方法是什么?
- 获取地图值作为向量的最佳方法是什么
- 哪种数据结构是在一个向量中搜索和计数对象对的最佳数据结构
- 擦除范围从std :: vector删除向量的最佳方法
- 最佳做法:将派生类的向量传递给基类向量上的方法
- 在std::向量中表示原始字节的最佳方式
- 从向量中获取n个最佳元素
- 存储动态创建对象的列表/向量的最佳方法是什么
- C++是修改这些对象的向量中所有对象的给定成员的最佳方法
- 将函数应用于向量子集的最佳方法是什么
- 在转换一个向量的元素时,连接两个向量的最佳方式是什么