Я не использую boost только стандартную библиотеку, и в некоторых вопросах я видел, что основное различие между boost::scoped_ptr<T>
и std::unique_ptr
заключается в том, что boost::scoped_ptr<T>
является ни возможностью копирования, ни перемещением, затем Мне было интересно, какой лучший выбор для boost::scoped_ptr<T>
? Используя std::unique_ptr
или используя необработанные указатели с правилом три/пять, чтобы избежать копирования и перемещения?
Я предлагаю использовать const std::unique_ptr
.
Вы почти никогда не хотите напрямую управлять исходными указателями, поэтому unique_ptr
- единственный разумный вариант (shared_ptr
не подходит для pimpl, редко вы хотите разделить объект impl). Добавление const
сделает его не движимым, как scoped_ptr
.
Вопрос немного неоднозначен, но ответ очень определенно, что вы должны использовать либо std :: unique_ptr, либо std :: shared_ptr, чтобы удерживать ваш pimpl, в зависимости от того, хотите ли вы, чтобы ваш класс делил состояние (shared_ptr) или имел эксклюзивный доступ с возможностью автоматического перемещения (unique_ptr).
Управлять голыми указателями крайне сложно, потому что невозможно, если вы управляете более чем одним классом. unique_ptr был создан, чтобы вы могли легко писать безупречные программы.
Было бы разумно использовать его.
std::unique_ptr
который прояснит владение и позволит избежать больше кода (и головной боли).
const std::unique_ptr