从对象指针的 STD 列表中擦除对象
erase object from std list of object pointers
我有一个处理玩家列表的类大厅(这是一个抽象类,只有纯虚拟方法)现在我尝试执行以下操作:
...
std::list<Player*> list;
...
Lobby::Lobby (std::string name, unsigned int size){
m_size = size;
m_name = name;
std::list<Player*> list(size);
}
...
void Lobby::removePlayer(int playerID){
for (std::list<Player*>::iterator it = list.begin(); it != list.end(); it++){
if ((*it)->id == playerID){
it = list.erase(it);
}
}
}
...
我总是得到两个错误,并且不知道如何解决它们:
error C2259: 'Member' : cannot instantiate abstract
class
我几乎是新手C++,但认为如果我使用基类的指针列表,它应该可以工作?!
IntelliSense: no suitable user-defined conversion from "std::_List_iterator<std::_List_val<std::_List_simple_types<Member>>>" to "std::_List_iterator<std::_List_val<std::_List_simple_types<Member *>>>" exists**
几点:首先,关于你的问题。我看不出您提供的代码没有任何问题,除了它不是您正在编译的代码。看起来,您有一个成员列表*,并将其称为成员。其次,看remove_if。它不适合为你做工作。最后,看起来您这里有内存泄漏。您从列表中删除了播放器的实例,但不释放其内存(调用 delete)
我可以从错误消息中看出您没有向我们显示实际代码。第二条消息告诉我们你有一个list<Member*>
,也许是一个list<Member>
,或者至少是两者的迭代器。list<Member>
也可以解释第一个错误,因为list
操作试图构造Member
对象,这是不可能的。
我的猜测是,你把*
忘在了某个地方。
您还需要查看对象的生命周期。C++没有垃圾回收器,因此仅从该列表中擦除指针不会杀死Member
对象本身。最好使用克里斯在他的评论中建议的智能指针。
相关文章:
- C++ 根据成员函数从矢量中擦除对象
- 擦除矢量问题矢量中的对象
- 如何将某个元素从shared_ptr擦除到对象向量?
- 如何根据某些值擦除/删除类对象的向量
- C++ 向量::使用类对象迭代器擦除不擦除向量成员
- 擦除矢量中的对象时出错.如何将移动作业运算符添加到我的类中
- 在小对象优化中调试崩溃以进行类型擦除
- 从向量中擦除 opencv 矩形对象
- 从对象指针的 STD 列表中擦除对象
- c++矢量对象.擦除
- 对象是否可以从标准C++容器中擦除自身
- 在C++中从矢量中擦除对象
- c ++如何在内部循环中使用带有自动的矢量擦除对象
- 无法删除和擦除矢量上的对象指针
- 从矢量中擦除对象的特定实例
- 对象的 C++ 向量,包含动态分配的内存 - "擦除"不起作用
- 从 std::map 擦除对象时破坏对象
- 擦除CPP中的重叠对象
- 矢量擦除函数删除错误的对象
- 从基类ptr的vector对象中擦除