Должен ли я использовать shared_ptr или unique_ptr

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

Это правильно?

51
задан Nic Hartley 29 May 2016 в 16:01
поделиться