thinct
thinct
采纳率0%
2017-08-12 02:05 阅读 1.8k

如何解决线程中的内存泄漏问题?

1


main.cpp

#include <QCoreApplication>
#include "thread.h"


int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    Thread* thread = new Thread();
    thread->start();

    return a.exec();
}

thread.h

#ifndef THREAD_H
#define THREAD_H

#include <QThread>
#include <QDebug>

class Thread : public QThread
{
    Q_OBJECT
public:
    explicit Thread(QObject *parent = 0)
        : QThread(parent), exitFlag(false) {}

    void run() Q_DECL_OVERRIDE {
        if (exitFlag) {
            return;
        }

        while (true) {
            Thread* t = new Thread();
            t->exitFlag = true;

            connect(t, &QThread::finished, [=](){
                t->deleteLater(); // 这里没有真正删除,因为有内存泄漏
            });

            t->start();
            // 在线程t结束之后,删除t
        }
    }

signals:
public slots:

public:
    bool exitFlag;
};


#endif // THREAD_H

怎样在解决线程 t 的内存泄漏问题?

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

2条回答 默认 最新

  • lmb1612977696 幻想之渔 2017-08-12 03:01

    解决这种问题的最简单方式,就是避免自己直接管理内存,不要使用指针,直接使用对象,出了whlie作用域就自己析构了。或者使用智能指针

    点赞 1 评论 复制链接分享
  • thinct thinct 2017-08-12 15:31

    终于解决了,只要改动connect就可以:

    connect(t, &QThread::finished, this, [=](){
            delete t;
    });
    
    点赞 评论 复制链接分享

相关推荐