将std :: future移至另一个std :: future

时间:2019-04-27 13:49:41

标签: c++ multithreading reference future stdmove

我正试图将类的std :: future成员移至同一类的另一个成员。

我需要这样做,因为如果我想调用std :: vector.push_back(MyClass),我需要删除带有简单引用的副本构造函数,并使用double ref创建另一个副本构造函数,因为我的类包含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是在主构造函数上初始化的,但无需在此处粘贴。 两者都不起作用。 感谢您的建议。

1 个答案:

答案 0 :(得分:1)

p_myclassconst,然后p_myclass._future也是如此。这就是为什么它不能被移走的原因。从对象移动需要对其进行修改。 _future(std::move(p_myclass._future))尝试复制它,但是std::future当然不可复制。