这些是我们在代码中使用的3个版本。我们想要标准化。看起来第二和第三是最快的?但是我们应该在第2个/第3个版本中调用.clear()吗?
第一
qDeleteAll(container);
container.clear();
第二
while (!container.isEmpty())
container.removeLast();
第3次
while (!container.isEmpty())
delete container.takeLast();
答案 0 :(得分:0)
如果您坚持使用拥有 QList<QObject*>
,您应该从中获取并创建一个自定义容器,以您期望的方式管理对象的生命周期。 手动资源管理是一个等待发生的错误。避免它。
关于您的替代方案:
qDeleteAll(container);
container.clear();
工作正常。您希望它最快,因为容器从未调整过大。
while (!container.isEmpty())
container.removeLast();
泄漏所有元素的存储空间。
while (!container.isEmpty())
delete container.takeLast();
工作正常。你会期望它比第一种选择慢,因为你不断缩小容器。无论如何,这都会有一些开销。
作为替代方案,在现代代码中,您可以使用std::list
并按值存储对象:
std::list<MyObject> objects;
objects.emplace_back(...);
...
你也可以使用QObject
作为对象容器,毕竟在你销毁它的时候,它会保证处理它们。