删除std :: list的内容

时间:2016-10-10 18:19:21

标签: c++ c++11 doubly-linked-list stdlist

我有一个我不再需要的指针列表。要删除所有这些,我通常可以迭代列表:

for (T* ptr: mylist) {
    delete ptr;
}

或者我可以删除第一个或最后一个元素,直到列表为空:

while (!mylist.empty()) {
    delete mylist.front(); //or mylist.back()
    mylist.pop_front(); //or mylist.pop_back()
}

对于性能和清晰度,首选方法是什么?

3 个答案:

答案 0 :(得分:4)

最好的方法是将std::unique_ptr's存储在列表中,而不是自己管理内存。然后你只需mylist.clear()

答案 1 :(得分:1)

他们做了两件不同的事情。第二个留给你一个空列表。第一个给你一个包含一堆无效指针的列表;可能会或可能不重要,具体取决于此操作后列表中发生的情况。

答案 2 :(得分:1)

我会用你的第一个例子。为了获得最佳实践,您应该在之后清除列表,以确保其中没有任何无效指针。

for (T* ptr : mylist) delete ptr;
mylist.clear();