Понимание QTimer с помощью лямбды и рекурсивного вызова функций
У меня есть следующий код:
void class::Testfunc()
{
QTimer* timer = new QTimer;
QObject::connect(timer, &QTimer::timeout, [this](){
emit Log("Time out...");
TestFunc(serverAddress, requestsFolderPath);
// deleteLater(); //*** why does this crash if used to replace the connect below?
});
connect(timer, &QTimer::timeout, timer, &QTimer::deleteLater);
timer->setSingleShot(true);
timer->start(1000);
}
Таймер одиночного выстрела создается с тайм-аутом, связанным с лямбда-функцией, которая регистрирует вход в лямбда-функцию каждую секунду (печатает текст в стандартный вывод) и снова вызывает функцию.
Это работает без проблем. Однако, если я удаляю вызов connect для deleteLater (ниже лямбда-функции), но включаю вызов deleteLater в лямбда-функции, функция завершается ошибкой. Он печатает один раз и вскоре после этого, вылетает при попытке удалить объект таймера.
В чем разница между двумя вызовами deleteLater в этом случае и почему размещение deleteLater в лямбда-функции вызывает здесь проблему, в то время как создание отдельного соединения работает, как и ожидалось, даже если оба вызывают deleteLater в ответ на сигнал тайм-аута таймера?