Назад к вопросамПочему
JuniorТеорияЧасто
Почему std::unique_ptr только перемещаем, и как передавать владение через API?
unique_ptr — эксклюзивное владение; copy дал бы двух владельцев и double-delete. Copy удалены, move определены. Передача: unique_ptr<T> по значению (вызывающий std::move'ит) или unique_ptr<T>&&. Для заимствования — T&/const T&. Возврат — move через RVO.
- Присваивать
unique_ptrдругому безstd::move— ошибка компиляции - Передавать
unique_ptr<T>&и неожиданно мутировать в callee - Использовать
unique_ptr<T>для borrow — путает семантику владения
- Чем
std::move(uniquePtr)отличается отuniquePtr.release()? - Почему
unique_ptr— zero-overhead по сравнению с сырым указателем?