возвращает ссылку
Возвращает shared_ptr
только в том случае, если вы намерены получить доступ к управлению жизненным циклом.Это правильный дизайн, но, как вы сказали, Container
несет полную ответственность за очистку.shared_ptr
- это просто деталь реализации Containter
, тот факт, что для реализации контейнера используется vector
из shared_ptr
s, не должен отображаться через интерфейс.
Невернуть указатель, если нет смысла получать NULL
из Container
.Обычно это не так.Все, что хочет пользователь, - это доступ к i-тому элементу контейнера, и ссылка делает это отлично.
То, что вы действительно хотите, это std::vector<std::unique_ptr<Foo>>
.Container
- это тот, кто управляет памятью и говорит об этом в объявлении члена.Все остальные не имеют никакого дела, зная реализацию.
Посмотрите Boost.Pointainers , если вы не хотите или не можете использовать C ++ 0x.