通过将 finished() 信号连接到 QObject::deleteLater() 来释放位于刚刚结束的线程中的对象
deallocate objects that live in a thread that has just ended, by connecting the finished() signal to QObject::deleteLater()
发件人: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(),我就不必担心工作线程中的内存泄漏?
工作线程 class 的哪些对象将自行释放?
connect(workerThread, &WorkerThread::finished, workerThread, &QObject::deleteLater);
来自:doc.qt.io/qt-5/qthread.html#details
他们已经显示连接到 deleteLater 插槽的工作线程的对象。现在这是否意味着我在 worker class 中分配内存的所有对象都将被自动删除?
What objects is it going to deallocate on its own?
您连接的 deleteLater
个插槽的对象。
但你似乎倒过来了:线程和对象生命周期是正交的问题。仅仅因为东西在其他线程中运行并不意味着它会以某种方式泄漏 - 除非您完全放弃对象生命周期管理。
假设您的对象位于主线程中。你将如何管理他们的一生?在工人中做同样的事情。也没有必要在工作线程中结束对象生命周期。你可以把它们推回主线程,结束工作线程,在主线程中销毁它们。等等。线程在这里没有引入任何新问题:您从一开始就遇到了问题。解决了,然后加线程就不会再出现了:)
如果 QThread
结束(当它 run()
方法 returns 时)它发送信号 QThread::finished
。
每个 QObject
的 deleteLater
插槽连接到此信号的都将被删除。
如果您将 QThread::finished()
信号连接到 QThread
(http://doc.qt.io/qt-5/qthread.html#details) 文档中提到的 worker 对象的 QObject::deleteLater()
方法,则该 worker 将被删除QThread
完成后。
您在工作人员中创建的所有其他 QObjects
将仍然存在。
如果您也希望删除它们,则必须将它们连接到相同的 QThread::finished() 信号,或者通过将工作对象设置为另一个对象的父对象来使用父子机制(通过传递它作为构造函数中的父级 (http://doc.qt.io/qt-5/qobject.html#QObject) or by setting it explicitly with void QObject::setParent(QObject *parent)
(http://doc.qt.io/qt-5/qobject.html#setParent).
发件人: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(),我就不必担心工作线程中的内存泄漏?
工作线程 class 的哪些对象将自行释放?
connect(workerThread, &WorkerThread::finished, workerThread, &QObject::deleteLater);
来自:doc.qt.io/qt-5/qthread.html#details
他们已经显示连接到 deleteLater 插槽的工作线程的对象。现在这是否意味着我在 worker class 中分配内存的所有对象都将被自动删除?
What objects is it going to deallocate on its own?
您连接的 deleteLater
个插槽的对象。
但你似乎倒过来了:线程和对象生命周期是正交的问题。仅仅因为东西在其他线程中运行并不意味着它会以某种方式泄漏 - 除非您完全放弃对象生命周期管理。
假设您的对象位于主线程中。你将如何管理他们的一生?在工人中做同样的事情。也没有必要在工作线程中结束对象生命周期。你可以把它们推回主线程,结束工作线程,在主线程中销毁它们。等等。线程在这里没有引入任何新问题:您从一开始就遇到了问题。解决了,然后加线程就不会再出现了:)
如果 QThread
结束(当它 run()
方法 returns 时)它发送信号 QThread::finished
。
每个 QObject
的 deleteLater
插槽连接到此信号的都将被删除。
如果您将 QThread::finished()
信号连接到 QThread
(http://doc.qt.io/qt-5/qthread.html#details) 文档中提到的 worker 对象的 QObject::deleteLater()
方法,则该 worker 将被删除QThread
完成后。
您在工作人员中创建的所有其他 QObjects
将仍然存在。
如果您也希望删除它们,则必须将它们连接到相同的 QThread::finished() 信号,或者通过将工作对象设置为另一个对象的父对象来使用父子机制(通过传递它作为构造函数中的父级 (http://doc.qt.io/qt-5/qobject.html#QObject) or by setting it explicitly with void QObject::setParent(QObject *parent)
(http://doc.qt.io/qt-5/qobject.html#setParent).