首页 > 解决方案 > QThreads - 为什么在构造函数中分配内存而不是拥有普通的类成员?

问题描述

http://doc.qt.io/qt-5/qthread.html

class Controller : public QObject
{
    Q_OBJECT
    QThread workerThread;
public:
    Controller() {
        Worker *worker = new Worker;
        worker->moveToThread(&workerThread);
        connect(&workerThread, &QThread::finished, worker, &QObject::deleteLater);
        connect(this, &Controller::operate, worker, &Worker::doWork);
        connect(worker, &Worker::resultReady, this, &Controller::handleResults);
        workerThread.start();
    }

我的方式:

class Controller: public QObject
{
    Q_OBJECT
public:
    Worker  objWorker;
    QThread objQThread;

    Controller();
    ~Controller();

public slots:
    void receiveImage();
};

Controller::Controller()
{
    objWorker.moveToThread( &objQThread );

    connect( &objWorker, &Worker::imageReady, this, &Controller::receiveImage );

    objQThread.start();
}

他们的方法在某些方面比我的更好吗?在哪种情况下应该首选哪个?

标签: c++qtqthread

解决方案


来自:http ://doc.qt.io/qt-5/qthread.html

从 Qt 4.8 开始,可以通过将 finished() 信号连接到 QObject::deleteLater() 来释放刚刚结束的线程中的对象。

这只能通过创建 Worker 类的指针对象并为其分配内存来实现。


推荐阅读