Основное отличие конструкторов копирования и перемещения в C++ заключается в том, как происходит инициализация объекта:
- Конструктор копирования предназначен для инициализации объекта путём копирования значений членов из объекта того же типа. 1 Он создаёт реальную копию объекта со своей личной выделенной динамической памятью. 8
- Конструктор перемещения передаёт право собственности на данные существующего объекта новой переменной без копирования исходных данных. 1 Он принимает ссылку rvalue в качестве первого параметра, а все последующие параметры должны иметь значения по умолчанию. 1
Таким образом, конструктор копирования создаёт копию объекта, а конструктор перемещения — перемещает данные из одной копии объекта в другую. 7
Конструкторы перемещения могут значительно повысить эффективность программы при передаче больших объектов. 1