我有一个我不再需要的指针列表。要删除所有这些,我通常可以迭代列表:
for (T* ptr: mylist) {
delete ptr;
}
或者我可以删除第一个或最后一个元素,直到列表为空:
while (!mylist.empty()) {
delete mylist.front(); //or mylist.back()
mylist.pop_front(); //or mylist.pop_back()
}
对于性能和清晰度,首选方法是什么?
答案 0 :(得分:4)
最好的方法是将std::unique_ptr's
存储在列表中,而不是自己管理内存。然后你只需mylist.clear()
。
答案 1 :(得分:1)
他们做了两件不同的事情。第二个留给你一个空列表。第一个给你一个包含一堆无效指针的列表;可能会或可能不重要,具体取决于此操作后列表中发生的情况。
答案 2 :(得分:1)
我会用你的第一个例子。为了获得最佳实践,您应该在之后清除列表,以确保其中没有任何无效指针。
for (T* ptr : mylist) delete ptr;
mylist.clear();