【问题标题】:Move a std::future to another std::future将 std::future 移动到另一个 std::future
【发布时间】:2019-04-27 13:49:40
【问题描述】:

我正在尝试将 std::future 类的成员移动到同一类的另一个成员。

我需要这样做,因为如果我想调用 std::vector.push_back(MyClass),我需要使用简单引用删除复制构造函数并使用双引用创建另一个,因为我的类包含 std::未来的成员。 当我移动 std::future 时,G++ 说:

call to deleted constructor of 'std::future<int>'
_future(std::move(p_myclass._future));
note: 'future' has been explicitly marked deleted here
future(const future&) = delete

但对我来说,std::move 返回一个双引用而不是单引用。所以我真的不知道这个错误是从哪里来的。

我尝试了使用双引用的赋值运算符 =,但也没有用。

class MyClass
{
private:
    std::future<int> _future;
public:
    MyClass(const MyClass&) = delete;
    MyClass(const MyClass&&);
    MyClass& operator=(MyClass &) = delete;
    MyClass& operator=(MyClass &&);
};
MyClass::MyClass(const MyClass &&p_myclass) : _future(std::move(p_myclass._future)) {};

MyClass& MyClass::operator=(MyClass &&p_myclass)
{
    this->_future = std::move(p_myclass._future);
    return (*this);
};

当然,我的 std::future 是在主构造函数上初始化的,但这里不需要粘贴它。 两者都不起作用。 感谢您的建议。

【问题讨论】:

    标签: c++ multithreading reference future stdmove


    【解决方案1】:

    p_myclassconst,然后是 p_myclass._future。这就是它不能被移走的原因;从一个对象移动需要修改它。 _future(std::move(p_myclass._future)) 尝试复制它,但当然 std::future 是不可复制的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-02
      • 2017-10-12
      • 1970-01-01
      • 2014-11-10
      • 1970-01-01
      • 2020-12-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多