Qt 清空QHash表中new出来的对象

释放分两种情况(QHash<Key, T>):

   1.T的类型为非指针,这时候直接调用clear()方法就可以释放了。

   2.T的类型为指针的情况,这时候直接调用clear()方法将不能释放,需要把每个对象delete。

该部分摘自:https://blog.csdn.net/fanbingyu85/article/details/9704905

方式1:一个个删除节点:

QHash<QString, QUserInfo*>::const_iterator j = m_hash.constBegin();
QHash<QString, QUserInfo*>::const_iterator delIndex = j;
while ((delIndex = j) != m_hash.constEnd()) 
{
    qDebug() << delIndex.key();
    QUserInfo* userInfo = (QUserInfo*)delIndex.value();
    
    if (userInfo != NULL)
    {
        delete userInfo;
        userInfo = NULL;
    }
    ++j;
    
    m_hash.remove(delIndex.key());
}


方式2:删除全部节点:

QHash<QString, QUserInfo*>::const_iterator j = m_hash.constBegin();
while (j != m_hash.constEnd()) 
{
    qDebug() << j.key();
    QUserInfo* userInfo = (QUserInfo*)j.value();
    
    if (userInfo != NULL)
    {
        delete userInfo;
        userInfo = NULL;
    }
    ++j;
}
m_hash.clear();

我自己借鉴用的删除全部节点,执行ok。

方式3:

看其他人有用 void qDeleteAll ( const Container & c )

Example:

 QList<Employee *> list; list.append(new Employee("Blackpool", "Stephen")); list.append(new Employee("Twist", "Oliver")); qDeleteAll(list.begin(), list.end()); list.clear();
我没试验成功,大家可以试试。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值