C++ 相应承诺离开范围后,未来有效

C++ 相应承诺离开范围后,未来有效,c++,c++11,asynchronous,C++,C++11,Asynchronous,如果从promise中提取future,则在promise离开作用域后调用future::get\u value是否有效 std::future<void> future; { std::promise<void> promise; future = promise.get_future(); promise.set_value(); } future.wait(); std::未来; { 承诺; 未来=承诺。获得未来(); promise.se

如果从
promise
中提取
future
,则在
promise
离开作用域后调用
future::get\u value
是否有效

std::future<void> future;
{
    std::promise<void> promise;
    future = promise.get_future();
    promise.set_value();
}
future.wait();
std::未来;
{
承诺;
未来=承诺。获得未来();
promise.set_value();
}
未来。等待();

我无法使用的和的文档找到答案。

承诺和未来有一个共享状态

一个承诺没有兑现、被摧毁的未来是一个破碎的承诺。共享状态被赋予一个异常并准备就绪

但是一个承诺被兑现,然后承诺被摧毁的未来是完全可以接受的。共享状态持续存在


查看和讨论上的共享状态。

谢谢,这很清楚。由此我得出结论,我的示例是正确的?@AartStuurman我没有审核代码;我刚找到问题的答案。我看不出有什么明显的问题。一次准备好所有的承诺是很奇怪的,但是有太多的评论,我能说什么呢。。。我自己,当我有一个可以中止的作业队列时,我会在将来使用
可选的
预期的
(与异常相比,我更喜欢这样;如果客户端无法从放弃的作业中恢复,就让客户端抛出)。此外,在实际作业队列中,我期望线程,因此也期望条件变量。再说一遍,所有可以省略的东西,但确定线程的正确性很难。嗯,也许我把我的例子弄得太复杂了。它不是实际代码库的一部分,仅作为使用已删除承诺的示例。为了有一个明确的问题,我来看看是否可以简化。无论如何,感谢您对代码的研究。