我有一個類在其析構函數中完成一個動作。 它在調用另一個函數等的單獨的類的函數中調用。什麼時候使用QTimer調用多個函數調用的析構函數?
void method3()
{
//action gets done
}
void method2()
{
//action gets done
method3();
}
void method1()
{
obj o;
//action gets done
QTimer::singleShot(1000, this, SLOT(method2()));
}
不使用QTimer::singleShot
,只是調用method2()
method3()
完成後調用析構函數。
什麼時候使用QTimer::singleShot
調用method2()
時obj的析構函數被調用? 是否有使用QTimer::singleShot
並且在method3()
的末尾有正常調用的析構函數?
不完全正確:在兩種情況下,method1完成時調用析構函數。當你使用異步機制如QTimer(免責聲明我對QT一無所知,但是從基本C++原則的知識來講)時,基於本地堆棧的對象的生命週期結束時,它們的創建範圍就結束了。如果你想延長對象的生命週期,它首先需要基於堆(忽略全局變量)。您最好的選擇是使用共享指針並將其傳遞給method2,然後將其作爲原始指針或對method3的引用,因爲它是同步調用的。 –