Я не могу использовать станд.:: вектор auto_ptr - я должен использовать shared_ptr?

Я не должен действительно совместно использовать объекты, но я действительно хочу удостовериться, что никакая утечка памяти не происходит. Это корректно для использования shared_ptr в этом случае?

5
задан amitlicht 15 March 2010 в 10:56
поделиться

4 ответа

Если низкоуровневая производительность / использование памяти не являются критическими требованиями (т.е. 97% всех случаев) тогда просто используйте shared_ptr. Это просто и понятно.

Если вы действительно хотите сохранить строгость и / или более точно выразить намерение владения, тогда boost :: ptr_vector может быть лучше - но если ваш класс не управляет какой-либо другой памятью, просто удалите вручную в вашем деструкторе не такой большой грех, как нас иногда заставляют думать ;-) Я большой сторонник RAII, но все же время от времени делаю это.

4
ответ дан 18 December 2019 в 13:13
поделиться

Если вы используете ускорение, boost :: ptr_vector может лучше подойти для ваших нужд.

Если нет, то вы можете либо использовать shared_ptr , как вы предложили, либо вручную удалить элементы вектора, как только вы закончите с ними.

С точки зрения обслуживания предпочтительным решением будет shared_ptr . Однако обратите внимание, что shared_ptr может привести к некоторому снижению производительности, которое может быть или не быть значительным для вашего приложения.

7
ответ дан 18 December 2019 в 13:13
поделиться

Это немного излишне, но лучшего умного указателя для этого не найти. Вы также можете рассмотреть контейнеры указателя boost.

В C ++ 0x вы можете хранить std :: unique_ptr в контейнерах, что ближе к вашим потребностям.

2
ответ дан 18 December 2019 в 13:13
поделиться

Вы также можете использовать Boost.PointerContainer . Использование shared_ptr выражает совместное владение. Теперь, если вы уверены, что ваши объекты привязаны к времени жизни контейнера, тогда PointerContainer - лучший вариант с точки зрения дизайна (это вообще слово?).

1
ответ дан 18 December 2019 в 13:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: