Переместить стандартное: будущее в другое стандартное будущее - PullRequest
0 голосов
/ 27 апреля 2019

Я пытаюсь переместить член std :: future в другой член того же класса.

Мне нужно это сделать, потому что если я хочу вызвать std :: vector.push_back (MyClass), мне нужно удалить конструктор копирования с простой ссылкой и создать еще один с двойным 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 возвращает двойную ссылку, а не одну. Поэтому я не знаю, откуда эта ошибка.

Я пробовал оператор присваивания = с двойным ref, но тоже не работает.

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 Ответ

1 голос
/ 27 апреля 2019

p_myclass равно const, а затем - p_myclass._future. Вот почему это не может быть перенесено из; перемещение от объекта требует его изменения. _future(std::move(p_myclass._future)) пытается скопировать его, но, конечно, std::future не копируется.

...