QVector对存储数据的释放

QVector对存储数据的释放
本文介绍使用Qt的QVector对存储数据的释放,包括存储自动变量指针变量两个方面。

一、QVector对自动变量的释放
QVector中的内建有内存管理,当 QVector生命周期结束,它的析构函数会把QVector中的元素销毁,并释放它们所占用的空间,所以用QVector一般不用显式释放 。但是当QVector存储数据相当大时候,并且对数据进行了一些操作,比如删除后,如果我们能积极主动的去释放内存,那么是非常明智高效。
我们的操作方法是:

    m_vecItems.clear();
    QVector<Custom>().swap(m_vecItems);

这里使用空的自定义类型的QVector来交换原向量,从而达到对QVector容量的清零。
当然如果用C++11的std::vector那么也可以这样释放:

m_vecItems.clear();
m_vecItems.shrink_to_fit();

二、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);

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();

2)void qDeleteAll(const Container &c)
也就是可以直接清空一个容器,比如QList、QVector等。

用这些Qt自带的函数,在本身框架里更简单。但是最上面的用法其实是C++的用法,在哪里都可以这么用。

有何不足,也欢迎批评指教!记录只为更好的总结与分享!

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值