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 のメモリ管理に従って、子のメモリも自動的に解放されます。
黄舟2017-04-17 14:51:04
~~delete
かどうかは、ThreadOnce
オブジェクトの作成方法によって異なります
これが基本であり、オブジェクトはヒープ上にありますもちろん、自分で削除