Я не должен действительно совместно использовать объекты, но я действительно хочу удостовериться, что никакая утечка памяти не происходит. Это корректно для использования shared_ptr в этом случае?
Если низкоуровневая производительность / использование памяти не являются критическими требованиями (т.е. 97% всех случаев) тогда просто используйте shared_ptr. Это просто и понятно.
Если вы действительно хотите сохранить строгость и / или более точно выразить намерение владения, тогда boost :: ptr_vector может быть лучше - но если ваш класс не управляет какой-либо другой памятью, просто удалите вручную в вашем деструкторе не такой большой грех, как нас иногда заставляют думать ;-) Я большой сторонник RAII, но все же время от времени делаю это.
Если вы используете ускорение, boost :: ptr_vector может лучше подойти для ваших нужд.
Если нет, то вы можете либо использовать shared_ptr
, как вы предложили, либо вручную удалить элементы вектора, как только вы закончите с ними.
С точки зрения обслуживания предпочтительным решением будет shared_ptr
. Однако обратите внимание, что shared_ptr
может привести к некоторому снижению производительности, которое может быть или не быть значительным для вашего приложения.
Это немного излишне, но лучшего умного указателя для этого не найти. Вы также можете рассмотреть контейнеры указателя boost.
В C ++ 0x вы можете хранить std :: unique_ptr
в контейнерах, что ближе к вашим потребностям.
Вы также можете использовать Boost.PointerContainer . Использование shared_ptr
выражает совместное владение. Теперь, если вы уверены, что ваши объекты привязаны к времени жизни контейнера, тогда PointerContainer - лучший вариант с точки зрения дизайна (это вообще слово?).