删除STL vector中的表项
Deleting entries in STL vector
我想清理指针存储在STL vector中的线程。我的做法如下。这是正确的做法,因为我正在删除条目,同时循环通过vector或有更好的方法来做到这一点。
请建议。
template <typename threadFuncParamT >
bool ThreadPool<threadFuncParamT>::KillSleepingThreads()
{
if(m_vecThreads.size() != 0)
{
for (; std::vector< ThreadWrapper < threadFuncParamT>* >::iterator itrCollThreads != values.end(); )
{
ThreadWrapper < threadFuncParamT> *pWrapper = m_vecThreads.back();
m_vecThreads.pop_back();
delete pWrapper;
} // for loop
} // if condition
}
谢谢!
如果你被允许使用c++ 11,那么让它变得可爱:
for (auto it = m_vecThreads.begin() ; it != m_vecThreads.end(); ++it )
{
delete *it;
}
m_vecThreads.clear();
你可以让它更可爱(当然,在c++ 11中-感谢@celtschk的评论):
for (auto & ptr: m_vecThreads) //it is called range-based for loop
{
delete ptr;
}
m_vecThreads.clear();
或者如果不允许使用c++ 11,那么将auto
(在第一个 for
循环中)替换为:
typename std::vector<ThreadWrapper<threadFuncParamT*>::iterator
//^^^^^^^^ you've to typename as well
注意,您也必须使用typename
,因为iterator
是一个依赖名称。
同样,下面的代码是不需要的,从你的代码中删除它:
if(m_vecThreads.size() != 0) // not needed!
在你的函数中试试:
for(size_t i = 0; i < m_vecThreads.size(); ++i)
{
delete m_vecThreads[i];
}
m_vecThreads.clear();
看起来比实际需要的复杂得多。如果你真的想删除向量中的每一项,只需delete
每一项,然后清除整个向量。
for(std::vector<ThreadWrapper<threadFuncParamT*>>::iterator
i = m_vecThreads.begin();
i != m_vecThreads.end();
++i)
{
delete *i;
}
m_vecThreads.clear();
作为题外话,通常有一个智能指针向量(例如boost::shared_ptr
)比必须显式删除项更好。
相关文章:
- MPI_Bcast c++ STL vector
- 将stl::vector iteratator条目传递到函数中
- STL vector.insert 方法期望_InputIterator作为参数
- stl::unordered_map 和 stl::vector 的销毁有何不同
- "lvalue required as increment operand" 关于 C++ 和 stl vector's begin()
- STL Vector push_back()
- STL vector: resize() and assign()
- STL Vector:临时调用 data() 时的未定义行为
- STL vector的默认构造函数
- 删除STL vector中的表项
- STL vector和new运算符
- c++ STL vector.erase()总是删除最后一个元素
- 返回对stl vector的引用
- 包装STL vector并改变其迭代器的行为
- 从类型为T的数组初始化类型为T*的Stl Vector
- 将包含指针的stl::vector强制转换为包含常量指针的stl::vector
- STL vector.clear()导致内存双元释放或pthreads程序损坏
- STL vector of vector从double到unsigned int的转换
- 检查STL vector中某个位置的元素是否存在(已设置)
- STL Vector, deque或容器等效Android