搜尋

首頁  >  問答  >  主體

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()));
PHPzPHPz2814 天前622

全部回覆(2)我來回復

  • 高洛峰

    高洛峰2017-04-17 14:51:04

    我的理解是QThread只是提供了一個線程管理的類. 使用的時候,依然按照類和對象的方式使用即可. 你創建一個線程對像以後,調用start()函數,就會觸發run()函數,開始線程的運行. 如果,運行的過程中, 我們記錄了一些數據,這些數據一般是保存在線程的數據成員函數中. 你如果, 在線程運行結束後, 立即釋放對象的內存,那麼這個我們就無法透過線程物件獲得結果.

    1. 當你不使用線程物件的時候, 你可以釋放;

    2. 沒有必要線程結束的時候,釋放線程;

    如果這個線程經常使用的話,我會把主窗體的指針作為線程的父親,當父親釋放的時候,根據Qt的內存管理, 會自動釋放孩子的內存.

    回覆
    0
  • 黄舟

    黄舟2017-04-17 14:51:04

    ~~delete還是不delete取決於你創建ThreadOnce物件的方式
    這是基礎知識,堆上的物件當然要自己delete

    回覆
    0
  • 取消回覆