sr.tFuture
初始化为“空”状态而不是“挂起”状态,我发现当我从构造函数初始化列表中删除 tFuture()
时,sr.tFuture
的状态变为挂起,这是正确的。但我不太明白其中的原因。是否是因为当 tFuture
被调用时,声明部分的 tFuture()
的值被覆盖,导致 tFuture
无法与任何 Promise 关联?
struct SharedResource
{
SharedResource(const SharedResource&) = delete;
SharedResource& operator=(const SharedResource&) = delete;
SharedResource() :
tPromise(), tFuture()
{}
std::promise<void> tPromise;
std::future<void> tFuture = tPromise.get_future();
};
int main()
{
SharedResource sr;
}
这个答案只是试图总结对问题中发布的问题的总体理解和解决方案,主要来源于françois-andrieux的评论。
首先,进行一些澄清。
std::promise
、std::packaged_task
或 std::async
)检索。问题中观察到的令人困惑的行为是
tFuture()
。tFuture()
,它会从默认初始值设定项初始化为 tPromise.get_future();
。第一种情况设置了一个无效的未来,OP将其称为“空”,而第二种情况设置了一个正确的有效未来。