Qt之QObjectCleanupHandler使用介绍

概述

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进行资源管理非常方便。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部