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 ?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage