我想知道以下代码是否是线程安全的
void use_value(int i, unique_ptr<vector<int>> v);
for (int i = 0; i < 10; i++){
unique_ptr<vector<int>> ptr = make_unique<vector<int>>(10);
// ...
// Here, the vector pointed to by ptr will be filled with specific values for each thread.
// ....
thread(
[i, &ptr](){
use_value(i, move(ptr));
}
);
}
谢谢
答案 0 :(得分:3)
这是未定义的行为。你不知道什么时候会调用lambda体。因此,您通过引用捕获的ptr
很可能超出范围,资源被破坏,并且您将留下悬空参考。
如果您有权使用c ++ 14,则应该"move-capture" ptr
(或者更好,只有vector
)进入lambda。
如果移动(或复制)向量,则代码将线程安全。