我有一个类在其析构函数中完成一个动作。 它在调用另一个函数等的单独的类的函数中调用。什么时候使用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的引用,因为它是同步调用的。 –