std::future 可以在没有 get 或 wait 的情况下导致 coredump

Can std::future cause coredump without get or wait

void func() {
    std::future<int> fut = std::async(std::launch::async, []{
        std::this_thread::sleep_for(std::chrono::seconds(10));
        return 8; 
    });
    return;
}

假设我有这样的功能。 std::future<int> 的对象 fut 使用 std::async 作业初始化,将来会 return 一个整数。但是fut会在函数funcreturns.

之后立即释放

是否存在这样的问题:当std::async作业returns并尝试将8分配给对象fut时,对象已经被释放...

如果是这样,可能会发生关于 SIGSEGV 的核心转储...

我说得对吗?或者 std::future 有一些机制可以避免这个问题?

使用 std::async 创建的 Futures 有一个等待任务完成的阻塞析构函数。

即使您改为从 std::promise 创建未来,~future() 的文档也不会提及您所询问的问题。

文档经常使用术语“共享状态”,暗示一个 promise 和一个 future 共享一个(heap-allocated?)状态,它持有 return 值,而不是销毁直到双双死亡。