我正试图将类的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是在主构造函数上初始化的,但无需在此处粘贴。 两者都不起作用。 感谢您的建议。
答案 0 :(得分:1)
p_myclass
是const
,然后p_myclass._future
也是如此。这就是为什么它不能被移走的原因。从对象移动需要对其进行修改。 _future(std::move(p_myclass._future))
尝试复制它,但是std::future
当然不可复制。