shared_ptr<>
имеет семантику общего владельца, которая реализуется посредством увеличения и уменьшения количества ссылок.Это связано с некоторыми накладными расходами, особенно когда многопоточность включена (потому что эти счетчики должны быть заблокированы).
Если ваши объекты являются общими, используйте shared_ptr<>
.
Но если они фактически принадлежат контейнеру и должны умереть вместе с контейнером, и раздача ссылок (указателей) также может прекратиться, когдаконтейнер умирает, затем используйте контейнеры-указатели, потому что у них меньше накладных расходов.
Если вы не уверены, используйте shared_ptr
, чтобы быть в безопасности.Если выясняется, что у вас есть проблемы с производительностью, вы всегда можете оптимизировать позже.(Оптимизировать работающую систему легче, чем заставить преждевременно оптимизированную систему работать.)