Оператор перемещения для класса, в котором есть член с удаленным оператором перемещения - PullRequest
0 голосов
/ 16 марта 2019

Класс X имеет удаленный operator=

X& operator=(X const&) = delete;

Класс Y выглядит так:

class Y {
private:
    X variableX;
public:
    Y(int p) {
         variableX= X(p);
    }
}

Я пытаюсь сделать что-то вроде этого:

class Z {
private:
    Y variableY;
public:  
    void functionF() {
         variableY = Y(42);
    }
}

Z variableZ;
variableZ.functionF();

Это не работает, потому что неявный operator= для класса Y удален из-за того, что он не существует для класса X.

Однако мне ничего не нужно никуда перемещать. Я хочу создать экземпляр класса Z, в какой-то момент создать объект Y вместо переменной-члена variableY, который, в свою очередь, создаст объект X вместо переменной variableY.variableX. Ничего не нужно перемещать, все может быть создано в той области памяти, где оно должно закончиться.

Можно ли добиться такого поведения?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...