我想用它foreach来等待线程终止。但出现以下错误,无法实现。请告诉我。
cannot move out of `*handle` which is behind a shared reference move occurs because `*handle` has type `std::thread::JoinHandle<()>`, which does not implement the `Copy` trait
Run Code Online (Sandbox Code Playgroud)
cannot move out of `*handle` which is behind a shared reference move occurs because `*handle` has type `std::thread::JoinHandle<()>`, which does not implement the `Copy` trait
Run Code Online (Sandbox Code Playgroud)
正如评论中已经指出的,解决方案是使用into_iter而不是iter. 原因如下:
当您调用该.iter()方法时,您可以迭代 的内容handles并获取向量的共享引用(这意味着,如果handles的类型为Vec<T>,则闭包中的参数的类型为&T)。因此,您无法修改向量的内容。
但这正是您在分配handle给时所做的事情_(它只是立即删除分配的值),因为此分配是将值从向量移到局部变量中。错误消息说,如果要JoinHandle实现的话,那就没问题Copy(例如,像整数一样,这些值不会移动,而是在赋值时复制),但事实并非如此。
与此相反,当调用 时into_iter,您会得到一个迭代器,它消耗向量(向量移动到迭代器中,然后在迭代它时消耗它)。在每次迭代中,您都会获得向量的一个元素,但您也拥有该值的所有权,这是可以的,因为向量在迭代后会失效。由于您现在拥有 的所有权handle,因此您可以将其移入_并删除其值。