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()));
高洛峰2017-04-17 14:51:04
我的理解是QThread
只是提供了一個線程管理的類. 使用的時候,依然按照類和對象的方式使用即可. 你創建一個線程對像以後,調用start()
函數,就會觸發run()
函數,開始線程的運行. 如果,運行的過程中, 我們記錄了一些數據,這些數據一般是保存在線程的數據成員函數中. 你如果, 在線程運行結束後, 立即釋放對象的內存,那麼這個我們就無法透過線程物件獲得結果.
當你不使用線程物件的時候, 你可以釋放;
沒有必要線程結束的時候,釋放線程;
如果這個線程經常使用的話,我會把主窗體的指針作為線程的父親,當父親釋放的時候,根據Qt的內存管理, 會自動釋放孩子的內存.