gpt4 book ai didi

c++ - 如果 QThread 的完成信号连接到 deleteLater,是否有必要删除在 QThread 上运行的对象?

转载 作者:行者123 更新时间:2023-11-28 04:13:52 35 4
gpt4 key购买 nike

所以我在构造函数中有以下代码。

m_someObject = new SomeObject();
m_someObject->moveToThread(&m_thread);
m_thread.start();

connect(&m_thread, &QThread::finished, m_someObject, &QObject::deleteLater);

任何我在析构函数中都有以下代码。

 m_thread.terminate();
while (m_thread.isRunning())
{
}

尽管已完成连接到 m_someObjectdeleteLater 插槽的 m_thread,我是否仍然需要删除 m_someObject

最佳答案

不,没有必要。只要线程最终完成发出,连接就应该完全按照您的意愿进行。请参见以下代码:

#include <QObject>
#include <QThread>
#include <iostream>

class Test : public QObject {
Q_OBJECT
public:
Test(){
std::cout <<"c'tor" << std::endl;
}
~Test(){
std::cout << "d'tor" << std::endl;
}
};

void startThread(){
QThread* thr = new QThread();
Test* test = new Test();
connect(thr, &QThread::finished, test, &QObject::deleteLater);
test->moveToThread( thr );
thr->start();
thr->quit();
thr->wait();
delete thr;
}

输出符合预期:

c'tor
d'tor

请注意,该代码段不会立即编译,因为它缺少一个 main。

关于c++ - 如果 QThread 的完成信号连接到 deleteLater,是否有必要删除在 QThread 上运行的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57084548/

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