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