Копирование классов с динамической памятью

Возможный дубликат:
Глубокая копия против мелкой копии
В чем разница между перегрузкой operator = и перегрузкой конструктора копирования?

Я вижу два способа копирования класса:

  1. Копировать конструктор

  2. оператор =

Мой вопрос заключается в том, какой из них следует создать новую копию динамически распределенной памяти (2 класса с одинаковыми данными и 2 экземпляра динамической памяти) и который должен просто переместить класс в новую область памяти (один класс с такой же динамически распределенной памятью). но класс в другом месте)?

1

Решение

Конструктор копирования создает новый объект и инициализирует его состояние на основе существующего объекта:

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

Какие бы решения вы ни принимали в отношении государства, они должны в равной степени применяться к обоим.

1

Другие решения

Вы должны реализовать оба, потому что вы можете объявить переменную через конструктор копирования. Вы можете назначить переменную. Например:

Class a; //some heap allocations inside
Class b(a); //must be valid
Class c = a; //must be valid too

И не забудьте о деструкторе. Простой способ — достичь операции копирования и назначения — использовать копирование при назначении, а затем обмен (копирование).&своп). копия & своп а также Правило трех

0

По вопросам рекламы [email protected]