Я делал некоторые объекты, используя идиому 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
и разрешение копий - это своего рода антипаттерн или плохая вещь.
Это правильно?