Я создавал некоторые объекты с помощью идиомы pimpl, но не уверен, следует ли использовать std::shared_ptr
или std::unique_ptr
.
Я понимаю, что std::unique_ptr
более эффективен, но для меня это не такая большая проблема, поскольку эти объекты в любом случае относительно тяжелые, поэтому стоимость std::shared_ptr
по сравнению с std::unique_ptr
относительно невелика.
В настоящее время я использую std::shared_ptr
только из-за дополнительной гибкости. Например, использование std::shared_ptr
позволяет мне хранить эти объекты в хэш-карте для быстрого доступа, сохраняя при этом возможность возвращать копии этих объектов вызывающим объектам (поскольку я считаю, что любые итераторы или ссылки могут быстро стать недействительными).
Однако эти объекты в действительности не копируются, поскольку изменения затрагивают все копии, поэтому мне было интересно, что, возможно, использование std::shared_ptr
и разрешение копий является своего рода анти-шаблоном или плохой вещью.
Это правильно?
unique_ptr
, но объекты с общими реализациями имеют свое применение, особенно если вы пишете иностранный код (например, COM, C++/CLI) или если класс действительно выглядит как ссылка тип. - person Alexandre C.   schedule 07.04.2011