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 подскажет развёрнутый ответ в реальном времени.