Я делаю некоторые объекты, используя идиому pimpl, но я не уверен, следует ли использовать std::shared_ptr
или std::unique_ptr
.
Я понимаю, что std::unique_ptr
более эффективен, но для меня это не столько проблема, как эти объекты относительно тяжеловесы, так что стоимость std::shared_ptr
over std::unique_ptr
относительно незначительна.
В настоящее время я работаю с std::shared_ptr
только из-за дополнительной гибкости. Например, использование std::shared_ptr
позволяет мне хранить эти объекты в хэш-карте для быстрого доступа, все еще имея возможность возвращать копии этих объектов вызывающим (как я считаю, любые итераторы или ссылки могут быстро стать недействительными).
Однако эти объекты в действительности не копируются, так как изменения влияют на все копии, поэтому мне было интересно, что, возможно, использование std::shared_ptr
и разрешение копий - это своего рода анти-шаблон или плохая вещь.
Правильно ли это?