是否需对std::future使用std::move?异步获取vector场景解惑
std::future 相关问题解答
示例代码
std::vector<int> foo(int n); int main() { auto future_vector = std::async(foo, 999); // ... 其他操作 // 问题均围绕此行: auto actual_vector = future_vector.get(); // ... 使用actual_vector进行操作 ... }
问题1解答
actual_vector是通过移动构造生成的,完全不需要显式写std::move(future_vector.get())。std::future::get()返回的是对应类型的右值,编译器会自动匹配std::vector的移动构造函数,把共享状态里的容器直接转移到actual_vector中。手动加std::move属于多余操作,不会带来任何好处。
问题2解答
共享状态的生命周期在调用get()时就会结束。
当get()被调用并提取出共享状态里的值后,这个共享状态就会被销毁,哪怕持有它的future对象还没走完自己的生命周期,共享状态也已经被释放了。
内容的提问来源于stack exchange,提问作者Adrian McCarthy
相关产品推荐
相关产品推荐

