Hardcopymoveидиомы
Чем copy-and-swap идиома полезна?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
Copy-and-swap: operator= реализуется через copy constructor + swap + деструктор старого. Параметр передаётся по значению (copy или move в зависимости от аргумента), что даёт автоматически strong exception safety и единый код для copy/move assignment.
class Buffer {
int* data_; size_t size_;
public:
Buffer(const Buffer& other); // copy ctor
friend void swap(Buffer& a, Buffer& b) noexcept {
std::swap(a.data_, b.data_);
std::swap(a.size_, b.size_);
}
Buffer& operator=(Buffer other) noexcept { // по значению!
swap(*this, other); // copy уже сделан в параметре
return *this; // old this уничтожится в other
}
};Преимущества: автоматически strong exception safety (если copy бросает, this не изменён), self-assignment безопасен, один код для copy и move. Требует noexcept swap на членах.
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.