在下面的代码中, mKnownRSList 的类型为:
std::vector<RSAddress *>
其中 RSAddress 是我写的一个类。功能 removeItem 会从此向量中删除项目。
我的问题是,在调用mKnownRSList上的erase函数后,我应该取消分配由std :: remove_if返回的迭代器指向的地址。目前,我在名为last的去引用迭代器上显式发出删除调用。你认为这种方法是否正确?谢谢。
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;
}
答案 0 :(得分:3)
您应该先删除容器首先中指针所指向的内容,然后从容器中删除/删除实际指针。
你在这里做的是取消引用指向不再存在的东西的迭代器。
答案 1 :(得分:1)
您认为这种方法是否正确?
不。正确的方法是使用像shared_ptr这样的smart_pointers。如果你愿意,那么你应该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()
);