Qt5 nueva señal a las conexiones lambda pérdida de memoria

Las nuevas señales Qt5 y la sintaxis de las ranuras nos permiten conectar señales no solo a las ranuras, sino también a funciones y functors / lambdas antiguos. Ahora el problema es que las lambdas son objetos esenciales con el operador (), y cuando se les conectan señales, se copian en algún lugar de las clases internas de qt. Y, cuando desconecta la señal de ese functor, permanece en qt internals. No entiendo, ¿es eso un comportamiento normal? ¿O tal vez hay una manera de destruir esos objetos funcionales después de la desconexión?

Aquí hay un ejemplo:

//example

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QTimer* timer = new QTimer();

    QSharedPointer<QMetaObject::Connection> connection(new QMetaObject::Connection());

    //functor is created and gets copied inside qt internals, connection variable is captured
    //inside the functor

    *connection.data() = QObject::connect(timer, &QTimer::timeout, [=]
    {
        qDebug() << "disconnected";
        QObject::disconnect(*connection.data());
    });

    timer->start(10000);

    return a.exec();
}

//example

Ahora, cuando veo el recuento de referencia fuerte de la variable de conexión después de la desconexión de la ranura, permanece en 2, lo que significa que el objeto funtor en sí todavía está vivo y en buen estado, aunque ahora no me sirve. ¿Echo de menos algo?

Respuestas a la pregunta(1)

Su respuesta a la pregunta