2013-02-08 90 views
1

我有一個QLocalServer在Qt5,它連接到newConnection()信號。Qt5,lambda和變種範圍

該信號調用這個函數:

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

拉姆達閉合類型的每個實例有它自己的用於通過捕獲值存儲部件。

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 2013-02-08 12:15:36