删除 std::list 的内容

Deleting content of a std::list

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

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

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

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

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

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

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

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

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