В книге Херба Саттера и Андрея Александреску «Стандарты кодирования C ++. 101 правила, рекомендации и передовой опыт» в Правиле 52 заключительная цитата такова:
"В редких случаях классы, которые имеют члены странных типов (например, ссылки, std :: auto_ptrs), являются исключением, потому что они имеют особую семантику копирования. В классе, содержащем ссылку или auto_ptr, вам, вероятно, потребуется написать конструктор копирования и оператор присваивания, но деструктор по умолчанию уже работает правильно. (Обратите внимание, что использование элемента reference или auto_ptr почти всегда неверно.) "
Понятно, почему использование ссылок в качестве членов - не лучшая идея (ответ на этот вопрос находится в этом сообщении: Что лучше: указатели или ссылки в данных-членах?)
- Что касается современного C ++, означает ли это, что использование unique_ptr в качестве члена класса обычно плохо? Или это была проблема только с auto_ptr и отсутствием семантики перемещения?
- Следует ли тогда использовать shared_ptr для полиморфного поведения?
Заранее спасибо!
unique_ptr
не копируется, у него нет странной семантики копирования, в отличие отauto_ptr
. - person Jarod42   schedule 01.07.2019auto_ptr
к выводам поunique_ptr
- это большой скачок. - person StoryTeller - Unslander Monica   schedule 01.07.2019auto_ptr
был уловкой и отражал наивное представление о том, как работает владение. Уроки, которые мы извлекли из этого, включены в новые типы общих указателей, поэтому рекомендации о том, как использоватьauto_ptr
, не применимы ни к чему другому. Да упокоится она с миром. - person Pete Becker   schedule 01.07.2019auto_ptr
, поэтому никто не может обвинять lib ppl в том, что у нее нет надлежащих инструментов ядра языка - person curiousguy   schedule 04.07.2019