QObject::moveToThread 中的移动语义

DSt*_*ens 1 c++ qt ownership-semantics qthread

QThread 类的文档中,一个示例设置的工作方式如下:

public:
Controller() {
    Worker *worker = new Worker;
    worker->moveToThread(&workerThread);
    //some connects to thread and worker
    workerThread.start();
}
~Controller() {
    workerThread.quit();
    workerThread.wait();
}
Run Code Online (Sandbox Code Playgroud)

Qt 是否使用moveToThread(...)此处的函数实现了实际的移动语义?即线程是否会在完成后重新分配 Worker 对象,因为分配的对象永远不会Worker*Controller()任何地方显式删除?

小智 5

moveToThread 不会转让所有权。

在链接的示例中,此行将确保在线程完成后删除工作线程:

connect(&workerThread, &QThread::finished, worker, &QObject::deleteLater);
Run Code Online (Sandbox Code Playgroud)