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

2 つのクライアント (クライアント ID 1 とクライアント ID 2) が次々に接続し、その後クライアント 1 が切断された場合、ラムダ関数内で何が起こるでしょうか? つまり、2 番目のクライアントが接続した後、 の値はどうなりclientConnectionますか? それは上書きされますか (そのためclientConnection、最初のクライアントの はもう有効ではなくなります)、それともそれぞれに有効なデータがありますか?

4

1 に答える 1

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
于 2013-02-08T12:01:19.287 に答える