在线程函数中捕获临时变量安全吗?
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();
}
在这种情况下,绝对不是。您正在通过引用捕获,而您的
adapterName
是副本,因此它会在每次循环迭代后消失。
将
adapterName
作为参考,您应该没问题,因为您的 adapterList
在线程运行时保持活动状态且不变。