阅读http://doc.qt.io/qt-4.8/qtalgorithms.html#qDeleteAll的文档,它要求我们在我们的容器上调用.clear。这是为什么?
为什么qDeleteAll不会为我们清除容器?
答案 0 :(得分:4)
根据http://doc.qt.io/qt-4.8/qtalgorithms.html#qDeleteAll
中的Qt文件请注意,qDeleteAll()不会从容器中删除项目;它只是调用删除它们。
我认为将qDeleteAll()与clear()分离在许多情况下都很有用,因为即使在使用qDeleteAll()删除其项目的已分配内存之后,它也允许您保留容器属性。例如:
{{1}}
如果你在qDeleteAll(hash)之后使用hash.clear(),或者如果hash.clear()被qDeleteAll(hash)隐式调用,那么你将无法在这个例子中检索键和大小
答案 1 :(得分:2)
一个原因是并非每个容器都有相同的方法来清除自己。如果你看一下qDeleteAll的代码,它只需要在传递给它的迭代器之间递增:
template <typename ForwardIterator>
Q_OUTOFLINE_TEMPLATE void qDeleteAll(ForwardIterator begin, ForwardIterator end)
{
while (begin != end) {
delete *begin;
++begin;
}
}
不同的容器可以(尽管不一定)有不同的方法来清除自己,这个模板为了完成它的工作不需要知道。