类模板
<future>

std::shared_future

template <class T>  shared_future;template <class R&> shared_future<R&>;   // specialization : T is a reference type (R&)template <>         shared_future<void>; // specialization : T is void
共享 future
一个 shared_future 对象其行为类似于一个 future 对象,除了它可以被复制,并且可以有多个 shared_future 对象共享共享状态的所有权。一旦就绪,它们还允许共享状态中的值被检索(可以多次)检索

shared_future 对象可以从 future 对象隐式转换(参见其构造函数),或者通过调用 future::share 来显式获得。在这两种情况下,从其获得的 future 对象都会将其与共享状态的关联转移给 shared_future,并使其自身变为无效

共享状态的生命周期至少持续到与它关联的最后一个对象被销毁为止。从 shared_future (使用成员函数 get)检索值不会释放其对共享状态的所有权(与 futures 不同)。因此,如果与 shared_future 对象关联,共享状态可以比最初获取它的对象(如果有的话)存活更长时间。

成员函数


模板特化

<future> 中声明了两个特定的 shared_future 特化。
1
2
template <class R&> shared_future<R&>;   // specialization : T is a reference type (R&)
template <>         shared_future<void>; // specialization : T is void 
它们的运行方式与未特化的模板相同,除了它们的 shared_future::get 成员函数的返回值。