gpt4 book ai didi

c++ - 将一个 std::future 移动到另一个 std::future

转载 作者:行者123 更新时间:2023-11-28 04:19:04 30 4
gpt4 key购买 nike

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

我需要这样做,因为如果我想调用 std::vector.push_back(MyClass),我需要删除带有简单引用的复制构造函数并创建另一个带有双引用的复制构造函数,因为我的类包含一个 std:: future 的成员。当我移动 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 是在主构造函数上初始化的,但没有必要将它粘贴到这里。两者都不起作用。感谢您的建议。

最佳答案

p_myclassconstp_myclass._future 也是。这就是为什么它不能被移动;从对象移动需要修改它。 _future(std::move(p_myclass._future)) 尝试复制它,但当然 std::future 不可复制。

关于c++ - 将一个 std::future 移动到另一个 std::future,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55881209/

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