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