谁拥有 future 和 promise 中的共享状态?特别是谁负责这些类中共享状态的构造和删除?还是应该对共享状态进行引用计数?我无法通过阅读有关cppreference的文档来获得答案。
我想到的最简单的方法是让std::promise
类负责创建共享状态,但随后将其交给从std::future
提取的std::promise
,以便在 future 被破坏时删除。 。但是,此方法可能导致悬空 promise 对象。因此,我不确定两者之间应该真正共享状态。
例如,下面的代码是否会产生未定义的行为(因为在破坏 future 时可能会破坏共享状态)?
auto prom = std::promise<void>{};
{
auto fut = prom.get_future();
}
prom.set_value();
此外,有关cppreference的
std::promise::~promise
的文档说“如果共享状态就绪,则将其释放”,这使我认为共享状态未计算引用。 最佳答案
当std::future
(或std::promise
)被销毁时,它将释放其共享状态。
This rule声明当说异步返回对象或异步提供程序释放其共享状态时,它将放弃对共享状态的引用。
如果该引用是最后一个引用,则共享状态将被破坏。
因此,是的,共享状态似乎是引用计数,并且不,您的代码示例不会产生UB,因为prom
仍然持有对该共享状态的引用。