2013-02-08 2 views
1

У меня есть QLocalServer в Qt5, который подключен к сигналу newConnection().Qt5, лямбда и область видимости

Этот сигнал вызывает эту функцию:

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(); 
}); 

Если два клиента (идентификатор клиента 1 и идентификатор клиента 2) подключить один за другой, а затем клиент 1 расцепители, что будет происходить внутри лямбда-функции? Я имею в виду, что после того, как второй клиент подключился, что произойдет со значением clientConnection? Будет ли он завышен (так что clientConnection первого клиента больше не будет действителен) или у каждого будут действительные данные?

ответ

4

Каждый экземпляр типа закрытия лямбда имеет собственное хранилище для элементов, захваченных значением.

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 
+0

Хорошо, спасибо :) – alexandernst