Easycopy

Чем конструктор копирования отличается от оператора присваивания?

1Постановка

Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.

2Решение

Конструктор копирования T(const T&) создаёт НОВЫЙ объект как копию существующего. Оператор присваивания T& operator=(const T&) изменяет УЖЕ существующий объект, делая его равным другому.

class Buffer {
    int* data_;
public:
    Buffer(const Buffer& other);        // copy ctor: создаёт новый
    Buffer& operator=(const Buffer& other);  // assign: меняет существующий
};

Buffer a(10);
Buffer b = a;   // copy ctor (b создаётся)
Buffer c(5);
c = a;          // operator= (c уже существует)

Разница: конструктор инициализирует «из ничего», присваивание сначала освобождает старые ресурсы, потом копирует новые. Поэтому operator= сложнее: обработка self-assignment, освобождение старого состояния. copy-and-swap — стандартная идиома.

3Как отвечать

  • Сначала уточните условия и ограничения, покажите аналитическое мышление.
  • Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
  • Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡

На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.