gpt4 book ai didi

c++ - std::promise 的存储: "communicate objects"

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:02:24 27 4
gpt4 key购买 nike

https://en.cppreference.com/w/cpp/thread/promise说第一个特化(2)std::promise<R&>是“用于在线程之间传递对象”。但是,我不知道如何使用此功能,也无法在网上的任何地方找到任何文档。我特别关心的是存储。如果我使用 std::promise<R&> ,我传入的对象存储在哪里?

根据 https://en.cppreference.com/w/cpp/thread/promise/set_value , ...

  • ... std::promise<R>有:
    • set_value(const R &value) ,
    • set_value(R &&value) .
  • ... std::promise<R&>只有:
    • set_value(R &value) .

我真的觉得这些签名很奇怪。我原以为右值引用变体是 std::promise<R&> 的一部分因为这个是“用于在线程之间传递对象”。将一个对象传递给另一个线程听起来像是“将它移动到关联状态,这样另一个线程就可以从关联状态读取它(防止对象在生成它的线程退出时被破坏)”。但是,该值似乎是通过引用传入的,而不是移入的。现在如果线程退出会发生什么情况?

使用 future/promise 在线程之间传递对象(而不是原语)的正确方法是什么?什么是使用 std::promise<R&> 的好例子?特化?

最佳答案

std::promise<R&> a; //stores the reference to R (a pointer with reference semantics)

std::promise<R> b; //stores an internal R object.

关于c++ - std::promise<R&> 的存储: "communicate objects",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57150416/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com