背景
QObjectCleanupHandler 类用于清理 QObject 类对象,通常可以作为资源清理器使用。
监视对象生命周期
①.概述
QObjectCleanupHandler 中管理的对象被 delete 后会自动从其管理到的象列表中删除,可以用来监视对象的生命周期。
②.代码示例
QtClassDemo * demo = new QtClassDemo(nullptr);
QObjectCleanupHandler * demoWatch = new QObjectCleanupHandler;
connect(ui.pushButton, &QPushButton::clicked, [demo, demoWatch]() {
demoWatch->add(demo);
});
connect(ui.pushButton_2, &QPushButton::clicked, [demo, demoWatch]() {
delete demo;
});
connect(ui.pushButton_3, &QPushButton::clicked, [demo, demoWatch]() {
if (demoWatch->isEmpty())
{
qDebug() << " demo 已被删除";
}
});
![在这里插入图片描述](https://img-blog.csdnimg.cn/fff27ef339f04cd4a24f88ce06ebce5b.png#pic_center)
自动清理对象
①.概述
QObjectCleanupHandler 对象在析构时会自动 delete 其所管理到对象,可用于动态对象的自动删除。
②.代码示例
connect(ui.pushButton, &QPushButton::clicked, [&]() {
QObjectCleanupHandler objectHandler;
objectHandler.add(new QtClassDemo("demo1"));
objectHandler.add(new QtClassDemo("demo2"));
objectHandler.add(new QtClassDemo("demo3"));
objectHandler.add(new QtClassDemo("demo4"));
});
![在这里插入图片描述](https://img-blog.csdnimg.cn/873ae94d9da34ecc987b669baf80be52.png#pic_center)
批量清理动态对象
①.概述
QObjectCleanupHandler 的 clear 方法会 delete 其所管理的所有对象,可用于动态对象的批量删除。
②.代码示例
connect(ui.pushButton, &QPushButton::clicked, [&]() {
QObjectCleanupHandler * objectHandler = new QObjectCleanupHandler;
objectHandler->add(new QtClassDemo("demo1"));
objectHandler->add(new QtClassDemo("demo2"));
objectHandler->add(new QtClassDemo("demo3"));
objectHandler->add(new QtClassDemo("demo4"));
objectHandler->clear();
});
![在这里插入图片描述](https://img-blog.csdnimg.cn/caee84235aa04a8db6efd1a7b6b60158.png#pic_center)