我在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
将不再有效)或者每个都有有效数据吗?
答案 0 :(得分: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