Qt5 novo sinal para vazamento de memória de conexões lambda

A nova sintaxe de sinais e slots Qt5 nos permite conectar sinais não apenas a slots, mas também a funções antigas e functors / lambdas. Agora o problema é que os lambdas são essencialmente objetos com o operador (), e quando você conecta sinais a eles, eles são copiados em algum lugar nas classes internas do qt. E, quando você desconecta o sinal daquele functor, ele fica em qt internals. Eu não consigo entender, isso é um comportamento normal? Ou talvez haja uma maneira de destruir esses objetos funcionais após a desconexão?

Aqui está um exemplo:

//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

Agora, quando observo a contagem de referência forte da variável de conexão após a desconexão do slot, ela permanece 2, o que significa que o próprio objeto functor ainda está ativo e bem, embora não seja útil para mim agora. Eu sinto falta de algo?

questionAnswers(1)

yourAnswerToTheQuestion