如何从集合中删除共享的 PTR 元素
how to remove a shared ptr element from set?
我有一个集合,其中集合中的每个元素都是 shared_ptr
类型,我想从集合中删除一个元素,在 eclipse 中该元素实际上被删除了,但是当我使用 valgrind 在 bash 中测试它时,我得到了很多无效的大小错误......
所以这让我觉得也许有一种不同的方法来删除 shared_ptr
类型的元素?
PeoplePointer 中的每个元素都是某个人的类:
typedef std::shared_ptr<person> peoplePointer;
class AA {
std::set<peoplePointer> setOfPeople;
public:
// function getName() return name of the person (person is another class)
void removeSomeonefromA(const std::string& name) {
for (std::set<peoplePointer>::iterator it = setOfPeople.begin();it != setOfPeople.end(); it++) {
if(name == (*it).get()->getName()) {
setOfPeople.erase((it));
}
}
}
};
灵感来自 std::map 的等价物remove_if。
如果能够使用 C++11 或更高版本的编译器,则可以使用:
void removeSomeonefromA(const string& name)
{
for (set<peoplePointer>::iterator it = setOfPeople.begin(); it != setOfPeople.end(); /* Empty */ )
{
if(name == (*it).get()->getName())
{
it = setOfPeople.erase(it);
}
else
{
++it;
}
}
}
如果需要使用以前的编译器版本,可以使用:
void removeSomeonefromA(const string& name)
{
for (set<peoplePointer>::iterator it = setOfPeople.begin(); it != setOfPeople.end(); /* Empty */ )
{
if(name == (*it).get()->getName())
{
setOfPeople.erase(it++);
}
else
{
++it;
}
}
}
相关文章:
- 为共享 ptr 向量实现复制 c'tor?
- C++:在不中断共享的情况下通过引用传递共享 PTR?
- 如何控制共享 ptr 引用计数?
- 这是MSVC 2013中具有共享PTR的单例的正确实现吗?
- 如何从原始 ptr 递增共享 ptr 的计数
- 唯一/共享 ptr 用于在数组超出范围后自动删除阵列
- C 在多个引用上共享PTR发布
- 共享PTR地图与LLDB漂亮的打印机
- 使针对特定托管对象的所有共享 ptr 失效
- c++在没有虚拟析构函数的多态性中共享ptr
- 我如何在void*和boost共享ptr之间切换
- gcc共享ptr副本分配实现
- C++11共享Ptr,共享相同的参考计数器
- 为什么这个显式析构函数会导致共享ptr中的内存损坏
- 在联合中共享ptr
- 从数组的共享ptr访问共享ptr
- 添加对共享ptr的引用会增加引用计数吗?
- 插入无序映射将共享ptr变为null
- 共享 PTR - C++:std::shared_ptr<T> 和 std::shared_ptr<T const> 有什么区别?
- 共享 PTR - shared_ptr 和 unique_ptr Lippman C++入门中的构造函数