firemail
标题:
QVector对存储数据的释放
[打印本页]
作者:
Qter
时间:
2020-3-10 09:19
标题:
QVector对存储数据的释放
文介绍使用Qt的QVector对存储数据的释放,包括存储自动变量指针变量两个方面。
一、QVector对自动变量的释放
QVector中的内建有内存管理,当 QVector生命周期结束,它的析构函数会把QVector中的元素销毁,并释放它们所占用的空间,所以用QVector一般不用显式释放 。但是当QVector存储数据相当大时候,并且对数据进行了一些操作,比如删除后,如果我们能积极主动的去释放内存,那么是非常明智高效。
我们的操作方法是:
m_vecItems.clear();
QVector<Custom>().swap(m_vecItems);
1
2
这里使用空的自定义类型的QVector来交换原向量,从而达到对QVector容量的清零。
当然如果用C++11的std::vector那么也可以这样释放:
m_vecItems.clear();
m_vecItems.shrink_to_fit();
1
2
二、QVector对指针变量的释放
如果你QVector 中存放的是指针,那么当 QVector 销毁时,那些指针指向的对象不会被销毁,那些内存不会被释放,这时需要自己来释放这些动态分配的内存,方法是:
for(auto it = m_vecItems.begin(); it != m_vecItems.end(); ++it)
{
if(*it != nullptr)
{
delete (*it);
(*it) = nullptr;
}
}
m_vecItems.clear();
QVector<Custom*>().swap(m_vecItems);
1
2
3
4
5
6
7
8
9
10
11
2018-10-29补充:
Qt之中,在QtAlgorithms里面有个函数,qDeleteAll,其本身有两个重载:
1)void qDeleteAll(ForwardIterator begin, ForwardIterator end)
用法如下:
QList<Employee *> list;
list.append(new Employee("Blackpool", "Stephen"));
list.append(new Employee("Twist", "Oliver"));
qDeleteAll(list.begin(), list.end());
list.clear();
1
2
3
4
5
6
2)void qDeleteAll(const Container &c)
也就是可以直接清空一个容器,比如QList、QVector等。
用这些Qt自带的函数,在本身框架里更简单。但是最上面的用法其实是C++的用法,在哪里都可以这么用。
有何不足,也欢迎批评指教!记录只为更好的总结与分享!
————————————————
版权声明:本文为CSDN博主「Little柯南」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:
https://blog.csdn.net/u010111033/article/details/79191985
欢迎光临 firemail (http://firemail.wang:8088/)
Powered by Discuz! X3