В C++ механизмы копирования и перемещения позволяют эффективно управлять ресурсами объектов, избегая избыточных копий и улучшая производительность при передаче объектов:
1. Конструктор копирования — создает новый объект, копируя данные из существующего:
MyClass(const MyClass& other) {
data = new int(*other.data);
// Копируем данные из другого объекта
}
2. Конструктор перемещения — передает владение ресурсом от одного объекта к другому, избегая копирования данных:
MyClass(MyClass&& other) noexcept : data(other.data) {
other.data = nullptr;
// После перемещения, объект other не имеет данных
}
3. Оператор присваивания (копирования) — переназначает ресурсы, освобождая старые данные и копируя новые:
MyClass& operator=(const MyClass& other) {
if (this != &other) {
// Проверка на самоприсваивание
delete data; // Освобождаем старые ресурсы
data = new int(*other.data); // Копируем данные
}
return *this;
}