1

我在 Qt5 中有一个 QLocalServer,它连接到newConnection()信号。

该信号调用此函数:

QLocalSocket *clientConnection = m_server->nextPendingConnection();
clientID++; // <--- declared in header
clientConnection->setProperty("ID", QVariant(clientID));

connect(clientConnection, &QLocalSocket::disconnected, [clientConnection](){
    qDebug() << "Client disconnected " << clientConnection->property("ID");
    clientConnection->deleteLater();
});

如果两个客户端(客户端 ID 1 和客户端 ID 2)一个接一个地连接,然后客户端 1 断开连接,那么 lambda 函数内部会发生什么?我的意思是,在第二个客户端连接后, 的值会发生什么clientConnection?它会被覆盖(因此clientConnection第一个客户端将不再有效)还是每个都有有效数据?

4

1 回答 1

4

lambda 闭包类型的每个实例都有自己的存储,用于存储按值捕获的成员。

int i = 1;
auto l1 = [i]() { return i; };    // captures 1
i = 2;
auto l2 = [i]() { return i; };    // captures 2
l1();    // returns 1
l2();    // returns 2
于 2013-02-08T12:01:19.287 回答