我在 Qt 5.15 檔案中閱讀了以下內容QThread::finished:
當這個信號發出時,事件回圈已經停止運行。除了延遲洗掉事件外,執行緒中將不再處理更多事件。該信號可以連接到
QObject::deleteLater(), 以釋放該執行緒中的物件。
但是,在檔案的另一部分中,它說
delete從擁有物件的執行緒以外的執行緒呼叫QObject (或以其他方式訪問物件)是不安全的,除非您保證該物件在那一刻不處理事件[強調我的]。
如果我理解正確,在QThread::finished發出之后,事件回圈已經停止運行,如果不存在延遲洗掉事件(即QObject::deleteLater尚未呼叫),則執行緒中的所有物件也應該完成處理事件。那么為什么要費心使用QObject::deleteLater這些物件而不是手動洗掉它們呢?我使用沒有問題QObject::deleteLater; 我只是確保我對 Qt 的理解是正確的。
uj5u.com熱心網友回復:
QObject::deleteLater在這種情況下,基本上只是謹慎行事。delete如果您絕對確定沒有機會訪問物件,則沒有理由不能簡單地訪問物件。
在實踐中,盡管您只需使用QObject::deleteLater并讓 Qt 為您處理它就可以節省更多時間,與在運行時或退出時除錯一些看似隨機的崩潰的麻煩相比,因為碰巧可以訪問您手動的物件洗掉。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/378519.html
