gpt4 book ai didi

c++ - 通过将 finished() 信号连接到 QObject::deleteLater() 来释放位于刚刚结束的线程中的对象

转载 作者:行者123 更新时间:2023-11-27 23:55:30 24 4
gpt4 key购买 nike

发件人:http://doc.qt.io/qt-5/qthread.html#details

From Qt 4.8 onwards, it is possible to deallocate objects that live in a thread that has just ended, by connecting the finished() signal to QObject::deleteLater().

这是否意味着如果我将 finished() 信号连接到 QObject::deleteLater() 我就不必担心工作线程中的内存泄漏?

它将自行释放工作线程类的哪些对象?

connect(workerThread, &WorkerThread::finished, workerThread, &QObject::deleteLater);来自:doc.qt.io/qt-5/qthread.html#details

他们已经展示了连接到 deleteLater 插槽的工作线程的对象。现在这是否意味着我在 worker 类中分配内存的所有对象都将被自动删除?

最佳答案

如果 QThread 结束(当它的 run() 方法返回时)它发送信号 QThread::finisheddeleteLater 插槽连接到此信号的每个 QObject 都将被删除。

如果将 QThread::finished() 信号连接到 QThread 文档中提到的 worker 对象的 QObject::deleteLater() 方法 ( http://doc.qt.io/qt-5/qthread.html#details ),然后在 QThread 完成后删除 worker。您在 worker 中创建的所有其他 QObjects 将仍然存在。如果您也希望删除它们,则必须将它们连接到相同的 QThread::finished() 信号,或者通过将工作对象设置为另一个对象的父对象来使用父子机制(通过将其传递为parent 在构造函数中 ( http://doc.qt.io/qt-5/qobject.html#QObject ) 或通过 void QObject::setParent(QObject *parent) ( http://doc.qt.io/qt-5/qobject.html#setParent ) 显式设置。

关于c++ - 通过将 finished() 信号连接到 QObject::deleteLater() 来释放位于刚刚结束的线程中的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50829106/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com