Подтвердить что ты не робот

Производятся ли конструкторы перемещения автоматически?

У меня большой класс, в котором много контейнеров STL.
Будет ли компилятор автоматически создавать конструктор перемещения, который будет перемещать эти контейнеры в цель или я должен сделать свой собственный?

4b9b3361

Ответ 1

Конструктор перемещения для класса X неявно объявляется как дефолт точно, когда

  • X не имеет объявленного пользователем конструктора копирования,
  • X не имеет объявленного пользователем оператора назначения копирования,
  • X не имеет объявленного пользователем оператора назначения перемещения,
  • X не имеет объявленного пользователем деструктора и
  • конструктор перемещения не будет неявно определен как удаленный.

Так, например, если ваш класс имеет элемент данных типа класса, у которого нет конструктора перемещения, ваш класс не получит конструктор перемещения, даже если у него нет объявленного конструктора копирования/перемещения, поскольку неявно объявлено move constructor будет определен как удаленный (из-за этого элемента данных).

Ответ 2

Конструкторы перемещения по умолчанию обычно привязаны к конструкторам копии по умолчанию. Вы получаете его, когда получаете другого. Однако, если вы пишете оператор-конструктор копирования/присваивания, то никакие операции копирования и перемещения по умолчанию не выполняются. Если вы пишете один из наборов, вы должны записать их все.