0
我被教导总是在存储对象时使用指针列表,但是我开始使用列表中的对象来代替它们。所以我想知道如何正确地从列表中删除一个对象?使用对象从std :: list中删除
第一个代码示例从指针列表中删除并正常工作,但第二个代码示例在运行时发生错误。使用对象列表处理时,是否需要使用删除?
using namespace std;
struct SomeObject{
SomeObject(int i){
something=i;
}
int something;
};
void main(){
list<SomeObject*> pointerList;
SomeObject * op = new SomeObject(2);
pointerList.push_back(op);
auto pit = pointerList.begin();
pointerList.erase(pit);
delete *pit;
cout<<(**pit).something<<endl;
list<SomeObject> objectList;
SomeObject o(1);
objectList.push_back(o);
auto oit = objectList.begin();
objectList.erase(oit);
delete &oit;//this one
cout<<oit->something<<endl;
int i;
cin >> i;
}
此外,这样做有什么下降和上升?
谢谢你的回答!然而(我认为)(* pit)返回指针而pit是迭代器本身?我的问题更多的是如何正确删除这两个列表中的对象。 –
(1)状态“delete&oit”显然是错误的。 (2)“删除(*坑)”是错误的,因为你不能使用(**坑)。某些东西,你引用了一个已被删除的对象。 (3)在你的例子中使用像你一样的“擦除”会删除列表中的对象,但据我所知,当项目位于列表的前面时,它不是惯用的。在这种情况下,我们使用“pop_front”。 – zentrunix