c++ - QT 正常结束线程后,还需要delete线程对象以回收资源吗?

查看:1308
本文介绍了c++ - QT 正常结束线程后,还需要delete线程对象以回收资源吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

QT 的线程正常退出后,是否还需要delete对象,以避免内存泄漏?

//从QThread继承出线程ThreadOnce
class ThreadOnce:public QThread
{
    Q_OBJECT
    void run() Q_DECL_OVERRIDE;
};

//重写run方法,里面不是死循环,跑完后就正常退出线程
void ThreadOnce::run()
{
    int i=0;    
    while(i<20)
    {
        std::cout<<i<<std::endl;
        i++;
    }
}

//是否有必要作如下的信号槽连接(this指向ThreadOnce的实例),来delete ThreadOnce的实例。
connect(this,SIGNAL(finished()),this,SLOT(deleteLater()));

解决方案

我的理解是QThread只是提供了一个线程管理的类. 使用的时候,依然按照类和对象的方式使用即可. 你创建一个线程对象以后,调用start()函数,就会触发run()函数,开始线程的运行. 如果,运行的过程中, 我们记录了一些数据,这些数据一般是保存在线程的数据成员函数中. 你如果, 在线程运行结束后, 立刻释放对象的内存,那么这个我们就无法通过线程对象获得结果.

  1. 当你不使用线程对象的时候, 你可以释放;

  2. 没有必要线程结束的时候,释放线程;

如果这个线程经常使用的话,我会把主窗体的指针作为线程的父亲,当父亲释放的时候,根据Qt的内存管理, 会自动释放孩子的内存.

这篇关于c++ - QT 正常结束线程后,还需要delete线程对象以回收资源吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆