Mediummove
Чем move constructor отличается от copy constructor?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
Copy constructor T(const T&) создаёт глубокую копию — все ресурсы дублируются (O(n)). Move constructor T(T&&) «крадёт» ресурсы из источника, оставляя его в валидном, но неопределённом состоянии (O(1) для vector/string).
std::string a = "hello";
std::string b = a; // copy: b="hello", a="hello" (копия)
std::string c = std::move(a); // move: c="hello", a неопределён
// после move объект a можно только уничтожить или присвоить заново- Move выбирается для rvalue (временный объект, результат
std::move); string a = b— копирование (b — lvalue); для move нужноstd::move(b);- После move объект-источник — в валидном, но неопределённом состоянии.
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.