Qt之QObjectCleanupHandler使用介绍

138 篇文章 191 订阅

概述

QObjectCleanupHandler 是一个非常有用的辅助类,看其名字就大概能知道,该类是用于清理QObject对象的。功能有点类似QPointer和QScopedPointer智能指针结合。

QObjectCleanupHandler

QObjectCleanupHandler 可以监视多个QObject对象的生命周期。并且最大的优点是,当对象在别的地方被删除后,会自动从QObjectCleanupHandler 中移除,并且可以通过isEmpty()来判断当前QObjectCleanupHandler 中是否还有监视对象。然后可以使用clear()方法直接删除所有的监视对象,而且当QObjectCleanupHandler 对象析构后,也会自动删除所有监视对象。

所以,QObjectCleanupHandler 通常可以作为资源清理器来使用。

适用场景

如果在一个函数中有多个QObject(或其派生类)对象需要管理,就可以使用QObjectCleanupHandler 。或者如果你懒得一个个删除对象,也可以在任何地方使用它。

示例

场景一

一个函数中有多个对象需要管理,如下:

void MainWindow::on_pushButton_2_clicked()
{
    QObjectCleanupHandler cleanupHandler;
    for(int i = 0 ; i < 10; ++i){
        CObject * obj = new CObject();
        cleanupHandler.add(obj);
        //do something..
    }
}

当函数执行完后,cleanupHandler会自动将所有创建出来的CObject指针对象删除,这和QScopedPointer智能指针功能差不多了。

场景二

如果不想一个个管理创建出来的对象, 那么都可以统一交给QObjectCleanupHandler来管理。

    m_pCleanupHandler = new QObjectCleanupHandler();
    m_pObj1 = new CObject();
    m_pObj2 = new CObject();
    m_pObj3 = new CObject();
    m_pCleanupHandler->add(m_pObj1);
    m_pCleanupHandler->add(m_pObj2);
    m_pCleanupHandler->add(m_pObj3);
    ...

最后只需要调用

m_pCleanupHandler->clear();

所有的对象都会全部释放。
并且,如果其中有些对象已经在别的地方进行释放, 那就会自动从QObjectCleanupHandler管理列表中自动删除,不会重复删除。所以,即便是重复调用clear()也不会出问题。

使用QObjectCleanupHandler进行资源管理非常方便。

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

luoyayun361

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值