线程 lambda 捕获循环变量

问题描述 投票:0回答:1

在线程函数中捕获临时变量安全吗?

std::vector<std::string> adapterList = getAdapterList();
std::vector<std::thread> captureThreads;
for (auto adapterName : adapterList) {
    captureThreads.push_back(std::thread([&] {
        // do something with adapterName. Safe?
    }));
}
for (auto& thread : captureThreads) {
    if (thread.joinable())
        thread.join();
}
c++ multithreading capture
1个回答
1
投票

在这种情况下,绝对不是。您正在通过引用捕获,而您的

adapterName
是副本,因此它会在每次循环迭代后消失。

adapterName
作为参考,您应该没问题,因为您的
adapterList
在线程运行时保持活动状态且不变。

注意:在 C++ 中,不存在“对引用的引用”,因此通过引用捕获引用将只是对同一对象的引用。你能用更多“参考”一词造一个句子吗?

© www.soinside.com 2019 - 2024. All rights reserved.