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