删除 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();
我有一个我不再需要的指针列表。要删除所有这些,我通常可以迭代列表:
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();