c++ - QT 正常结束线程后,还需要delete线程对象以回收资源吗?
PHPz
PHPz 2017-04-17 14:49:04
0
2
616

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()));
PHPz
PHPz

学习是最好的投资!

全部回覆(2)
小葫芦

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

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

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

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

黄舟

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

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板