在std :: future得到结果之前删除std :: promise是否安全?

时间:2018-11-20 03:35:21

标签: c++

我想包装一个旧的回调方式异步api以使用std :: promise / future。

struct InternalState {
    std::promise<int> promise_;
    // other internal state

    void Callback(int result) {
        promise_.set_value(result);
        delete this;
    }
};

std::future<int> DoSomethingAsync() {
    auto state = new InternalState();
    auto future = state->promise_.get_future();
    // this will run task in other thread, and put result via callback function
    AsyncOp(state);
    return future;
}

在其他线程中运行AsyncOp的运行任务并立即返回,计算结果后,将通过回调函数通知它。

很有可能在以后的get()/wait()之前,AsyncOp已经完成,并且所有InternalState对象包括的promise都被删除了。配对std::future::get()被删除后,std::promise是否安全?

0 个答案:

没有答案