Возможный дубликат:
Глубокая копия против мелкой копии
В чем разница между перегрузкой operator = и перегрузкой конструктора копирования?
Я вижу два способа копирования класса:
Копировать конструктор
оператор =
Мой вопрос заключается в том, какой из них следует создать новую копию динамически распределенной памяти (2 класса с одинаковыми данными и 2 экземпляра динамической памяти) и который должен просто переместить класс в новую область памяти (один класс с такой же динамически распределенной памятью). но класс в другом месте)?
Конструктор копирования создает новый объект и инициализирует его состояние на основе существующего объекта:
A x(y); // x is now in the same state as y
Оператор присваивания берет существующий объект и изменяет его состояние, чтобы соответствовать другому существующему объекту:
A x; // x is in the default state
x = y; // x is now in the same state as y
Какие бы решения вы ни принимали в отношении государства, они должны в равной степени применяться к обоим.
Вы должны реализовать оба, потому что вы можете объявить переменную через конструктор копирования. Вы можете назначить переменную. Например:
Class a; //some heap allocations inside
Class b(a); //must be valid
Class c = a; //must be valid too
И не забудьте о деструкторе. Простой способ — достичь операции копирования и назначения — использовать копирование при назначении, а затем обмен (копирование).&своп). копия & своп а также Правило трех