Конструкторы перемещения создаются автоматически? - PullRequest
30 голосов
/ 27 ноября 2011

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

Ответы [ 2 ]

50 голосов
/ 27 ноября 2011

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

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

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

2 голосов
/ 27 ноября 2011

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

...