谁负责共同的未来和承诺状态

Cur*_*ous 7 c++ future promise c++11 c++14

谁拥有期货和承诺的共享国家?特别是谁负责构建和删除这些类中的共享状态?或者共享状态应该被引用计数?通过在cppreference上阅读这些文档,我无法得到答案.

我想到它的方式最简单的方法就是让std::promise类负责创建共享状态,然后将其交给在未来被销毁时std::futurestd::promisefor中取出的那个.但是这种方法可能导致悬挂的承诺对象.所以我不确定这两者之间应该分享这个州的真实情况.

例如,下面的代码是否会产生未定义的行为(因为未来被销毁时可能会破坏共享状态)?

auto prom = std::promise<void>{};
{
    auto fut = prom.get_future();
}
prom.set_value();
Run Code Online (Sandbox Code Playgroud)

此外,std::promise::~promise关于cppreference 的文档说"如果共享状态已准备好,则释放它",这让我认为共享状态不是引用计数.

Ap3*_*p31 8

std::future(或std::promise)被销毁时,它会释放其共享状态.

此规则指出,当异步返回对象或异步提供程序被称为释放其共享状态时,它会放弃对共享状态的引用.

如果该引用是最后一个,则共享状态将被销毁.

所以是的,共享状态似乎是引用计数而不是,您的代码示例不会产生UB,因为prom仍然保持对共享状态的引用.