Что означает пользователь, объявленный для неявно объявленного оператора присваивания перемещения? - PullRequest
0 голосов
/ 03 мая 2018

Заявление

Неявно объявленный оператор назначения перемещения

Если для класса не заданы пользовательские операторы назначения перемещения тип (структура, класс или объединение), и все следующее верно:

нет пользовательских конструкторов копирования;
нет объявленных пользователем конструкторов перемещения;
нет заявленных пользователем операторов копирования;
нет деструкторов, объявленных пользователем;

с заявленным пользователем оператором копирования означает, что это означает только

имя_класса & имя_класса :: operator = (имя_класса &&)

или любой operator=() определен?

* +1032 * Пример: * 1 033 *
class Bar
{
public:
   Bar() = default;
   SomeClass some;
};

class Foo
{
public:
   Foo() = default;

   Foo& operator=(Bar&& bar) : some(std::move(bar.some))
   {
   }

   SomeClass some;
};

Соответствует ли это условию для имплицитно объявленного оператора перемещения?

То же самое относится и к неявно объявленному конструктору перемещения.

1 Ответ

0 голосов
/ 03 мая 2018

Обратите внимание, что в нем написано "объявленные пользователем copy операторы присваивания" (выделено мной). Не каждый оператор присваивания является оператором присваивания копии.

Для класса X оператор присваивания copy определен как operator=, который принимает параметр типа X, X&, const X&, volatile X& или const volatile X&. Таким образом, ваш Foo::operator=(Bar&&) не является оператором присваивания copy и, следовательно, не влияет на неявное объявление оператора присваивания перемещения (или копирования).

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