vector Erase -是否自动取消分配
std::vector Erase - does it de-allocate automatically?
下面的代码mKnownRSList的类型为:
std::vector<RSAddress *>
其中RSAddress是我写的类。函数op removeItem从vector中移除一个元素。
我的问题是,在调用mKnownRSList上的erase函数后,我应该取消分配std::remove_if返回的迭代器所指向的地址吗?目前,我显式地对名为last的解引用迭代器发出delete调用。你认为这种做法正确吗?谢谢。
void
ABC::removeItem(RSAddress * rsAddr)
{
auto last =
std::remove_if(mKnownRSList.begin(),
mKnownRSList.end(),
[rsAddr]( RSAddress * o )
{
return (*o == *rsAddr);
});
mKnownRSList.erase(last, mKnownRSList.end());
delete *last;
}
首先应该删除容器内部指针指向的对象,然后再从容器中删除实际指针。
你在这里做的是对一个指向不再存在的对象的迭代器解引用。
你认为这种方法正确吗?
不。正确的方法是使用像shared_ptr这样的smart_pointer。如果你愿意,那么你应该只做erase
。这样的
std::vector< std::shared_ptr< RSAddress > > mKnownRSList;
...
mKnownRSList.erase( std::remove_if(mKnownRSList.begin(),
mKnownRSList.end(),
[rsAddr]( const std::shared_ptr< RSAddress > & o )
{
return (*o == *rsAddr);
}),
mKnownRSList.end()
);
相关文章:
- C++:检查动态取消分配是否正常工作
- 使用 delete [] 运算符取消分配类中数据成员的内存
- 取消分配动态分配的字符数组的析构函数
- 我们应该在抛出异常之前取消分配内存吗
- 在这种情况下,数组a会被取消分配吗
- 在可拆卸线程完成操作时取消分配内存
- 是否避免因变量作用域而取消分配
- 在访谈中,用C++编写两个函数来分配和取消分配int数组
- 从私有类变量中取消分配内存
- C/C++:取消分配或删除动态创建的内存块
- "Delete"不取消分配动态内存
- 取消分配包含字符串变量的结构
- 从堆栈和堆中取消分配内存
- 加载程序如何从动态模块分配/取消分配静态数据
- 正确分配和取消分配指向对象的指针的二维数组
- VS2012静态代码分析器在取消分配内存向量时给出误报
- 如何取消分配在此函数中创建的内存
- 在Java中取消分配分配给对象的内存
- 是否需要取消分配基元数组
- 如何在标准模板库中分配/取消分配对象