- Что касается современного C ++, значит ли это, что использование unique_ptr в качестве члена класса обычно плохо?
Это не значитчто, и использование уникальных указателей не так уж и плохо.
Или это может быть проблема только с auto_ptr и отсутствующей семантикой перемещения?
Основная проблема заключается вэто копирование auto_ptr
передает право собственности на указанный ресурс.Это то, на что автор ссылается с помощью «своеобразной семантики копирования».
Учитывая, что const auto_ptr
не может быть скопировано, оно не так опасно, как неконстантное.Он имел нишевые применения, но не-копируемые типы довольно ограничены до C ++ 11.
Уникальный указатель не имеет особой семантики копирования.На самом деле уникальные указатели вообще не копируются.Это не такая большая проблема в C ++ 11, где тип может быть подвижным.Уникальные указатели охватывают все случаи использования, когда auto_ptr
можно было использовать, а также другие случаи, когда auto_ptr
был коварным.
Следует ли использовать shared_ptr для полиморфного поведения?
Можно использовать общий указатель, но это не обязательно.
PS auto_ptr
устарел вC ++ 11 и полностью удален из стандартной библиотеки в C ++ 17.