正确清洁 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
中使用 classA
的 QScopedPointer
个元素,然后简单地调用 clear().
这里是两行代码:
while (list.count())
delete list.takeLast();
我会写:
qDeleteAll(list);
list.clear();
我还建议您阅读此 post(因为您可能会从中得到一些有趣的东西):Does C++11 allow vector<const T>?
编辑(post 后几秒钟):我向 Pie_Jesu 道歉,他 post 发表了(非常)类似的评论这个问题,我在写这个答案的时候没有看。
我有一个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
中使用 classA
的 QScopedPointer
个元素,然后简单地调用 clear().
这里是两行代码:
while (list.count())
delete list.takeLast();
我会写:
qDeleteAll(list);
list.clear();
我还建议您阅读此 post(因为您可能会从中得到一些有趣的东西):Does C++11 allow vector<const T>?
编辑(post 后几秒钟):我向 Pie_Jesu 道歉,他 post 发表了(非常)类似的评论这个问题,我在写这个答案的时候没有看。