Timer mit Lambda und rekursivem Funktionsaufruf versteh
Ich habe den folgenden Code:
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);
}
Ein Single-Shot-Timer wird mit einer Zeitüberschreitung erstellt, die mit einer Lambda-Funktion verbunden ist. Diese Funktion protokolliert jede Sekunde den Eingang zur Lambda-Funktion (druckt Text auf stdout) und ruft die Funktion erneut auf.
Dies funktioniert ohne Probleme. Wenn ich jedoch den Verbindungsaufruf zu deleteLater (unterhalb der Lambda-Funktion) entferne, aber den Aufruf deleteLater in der Lambda-Funktion aktiviere, schlägt die Funktion fehl. Es wird einmal gedruckt und kurz danach stürzt ab, wenn versucht wird, das Timer-Objekt zu löschen.
Was ist der Unterschied zwischen den beiden Aufrufen von deleteLater in dieser Instanz und warum würde das Platzieren von deleteLater in der Lambda-Funktion hier ein Problem verursachen, wohingegen das Erstellen einer separaten Verbindung wie erwartet funktioniert, obwohl beide deleteLater als Reaktion auf das Timeout-Signal des Timers aufrufen ?