正确清洁 QVector

clean correctly a QVector

我有一个QVector

QVector<const ClassA*> list; 

而且我想知道在这种情况下清理 QVector 的最佳方法是什么。

ClassA 不是 QObject

查看 QVector.clear() 的文档 - 我认为它很好地回答了您的问题。

为了保存,我复制到这里:

void QVector::clear()

从向量中删除所有元素。

注:直到Qt 5.6,这也释放了vector使用的内存。从 Qt 5.7 开始,容量得以保留。要释放所有容量,请使用默认构造的向量进行交换:

QVector<T> v ...;
QVector<T>().swap(v);
Q_ASSERT(v.capacity() == 0);

或致电squeeze().

在这种情况下clear()只释放向量中的指针列表,但不释放内存。

我尝试做类似的事情

for (int index = 0; index < mList.count(); ++index )
{
    const ClassA* value = const_cast<ClassA*>(mList[index ]);
    delete value ;
}

我只是建议用 for each 循环并删除每个指针。之后清除矢量

for(auto item : list){
    delete item;
}
list.clear();

或者只需在 list 中使用 classAQScopedPointer 个元素,然后简单地调用 clear().

这里是两行代码:

while (list.count())
     delete list.takeLast();

我会写:

qDeleteAll(list);
list.clear();

我还建议您阅读此 post(因为您可能会从中得到一些有趣的东西):Does C++11 allow vector<const T>?


编辑(post 后几秒钟):我向 Pie_Jesu 道歉,他 post 发表了(非常)类似的评论这个问题,我在写这个答案的时候没有看。