我应该从`std::future`中`std::move`吗?

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

假设我有一个返回

std::vector
的函数,我想异步调用它。

std::vector<int> foo(int n);

int main() {
    auto future_vector = std::async(foo, 999);
    // ... other stuff

    // Questions are all about this:
    auto actual_vector = future_vector.get();

    // ... do stuff with actual_vector ...
}

Q1:

actual_vector
是从共享状态复制构造还是移动构造的? 我需要明确写
std::move(future_vector.get())
吗?

Q2:假设函数完成并且不再持有承诺:共享状态的生命周期是在未来调用

get
时结束还是持续到未来达到其生命周期结束?

c++ lifetime move-semantics stdasync std-future
1个回答
0
投票

std::future::get
按值返回。在按值返回的函数上调用
move
始终是错误的。

用于构造

actual_vector
的构造函数调用完全取决于
get
的实现。然而,该标准要求该值是通过调用
std::move(v)
生成的,其中
v
是共享状态,因此如果可能,将使用移动构造。

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