Qt之QObjectCleanupHandler使用介绍
概述
QObjectCleanupHandler 是一個非常有用的輔助類,看其名字就大概能知道,該類是用于清理QObject對象的。功能有點類似QPointer和QScopedPointer智能指針結(jié)合。
QObjectCleanupHandler
QObjectCleanupHandler 可以監(jiān)視多個QObject對象的生命周期。并且最大的優(yōu)點是,當對象在別的地方被刪除后,會自動從QObjectCleanupHandler 中移除,并且可以通過isEmpty()來判斷當前QObjectCleanupHandler 中是否還有監(jiān)視對象。然后可以使用clear()方法直接刪除所有的監(jiān)視對象,而且當QObjectCleanupHandler 對象析構(gòu)后,也會自動刪除所有監(jiān)視對象。
所以,QObjectCleanupHandler 通常可以作為資源清理器來使用。
適用場景
如果在一個函數(shù)中有多個QObject(或其派生類)對象需要管理,就可以使用QObjectCleanupHandler 。或者如果你懶得一個個刪除對象,也可以在任何地方使用它。
示例
場景一
一個函數(shù)中有多個對象需要管理,如下:
void MainWindow::on_pushButton_2_clicked() {QObjectCleanupHandler cleanupHandler;for(int i = 0 ; i < 10; ++i){CObject * obj = new CObject();cleanupHandler.add(obj);//do something..} }當函數(shù)執(zhí)行完后,cleanupHandler會自動將所有創(chuàng)建出來的CObject指針對象刪除,這和QScopedPointer智能指針功能差不多了。
場景二
如果不想一個個管理創(chuàng)建出來的對象, 那么都可以統(tǒng)一交給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);...最后只需要調(diào)用
m_pCleanupHandler->clear();所有的對象都會全部釋放。
并且,如果其中有些對象已經(jīng)在別的地方進行釋放, 那就會自動從QObjectCleanupHandler管理列表中自動刪除,不會重復(fù)刪除。所以,即便是重復(fù)調(diào)用clear()也不會出問題。
使用QObjectCleanupHandler進行資源管理非常方便。
總結(jié)
以上是生活随笔為你收集整理的Qt之QObjectCleanupHandler使用介绍的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Qt中使用线程的几种方式及区别
- 下一篇: Qt之QMetaObject::invo