Правило 4.5: Нет оператора назначения перемещения? - PullRequest
0 голосов
/ 06 января 2019

Исходя из популярного вопроса Что такое идиома копирования и обмена? :

  1. Почему в правило 4.5 не входит оператор присваивания перемещения (чтобы фактически стать правилом 5.5)? Вместо этого я прочитал (например, здесь Что такое правило четырех (с половиной)? ), что у нас есть правило 4,5 или 5?

  2. Поскольку функция-член swap имеет значение noexcept, должен ли оператор копирования также отмечаться одинаково (конструктор перемещения не может этого сделать, поскольку он вызывает конструктор по умолчанию, который может генерировать)?

dumb_array& operator=(dumb_array other) // should be noexcept?
{
    swap(*this, other);
    return *this;
}

1 Ответ

0 голосов
/ 06 января 2019

Потому что это не было бы полезно.

Нажмите на вторую ссылку, затем на следующую ссылку там Правило Большой Четверки (с половиной) - Перемещение Семантики и Управление Ресурсами

Внимательно прочитайте раздел 5 - Переместить задание .

Вы увидите

Устранение оператора назначения перемещения

На самом деле оператор присваивания перемещения не нужен!

со всеми объяснениями!

По существу, оператор dumb_array& operator=(dumb_array other) будет использоваться, когда обычно вы использовали бы оператор присваивания перемещения.

Я не подтвердил, но вы также можете удалить его, так как он все равно не будет создан.

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