std::auto_ptr
не разрешается хранить в контейнере STL, например std::vector
.Однако иногда бывают случаи, когда мне нужно вернуть коллекцию полиморфных объектов, и поэтому я не могу вернуть вектор объектов (из-за проблемы среза).Я могу использовать std::tr1::shared_ptr
и вставить их в vector
, но тогда мне придется заплатить высокую цену за поддержание отдельных подсчетов ссылок, и объект, который владеет фактической памятью (контейнером), больше не логически «владеет» объектами, потому чтоони могут быть скопированы из него без учета права собственности.
C ++ 0x предлагает идеальное решение этой проблемы в виде std::vector<std::unique_ptr<t>>
, но у меня нет доступа к C ++ 0x.
Некоторые другие примечания:
- У меня нет доступа к C ++ 0x, но у меня есть TR1.
- Я хотел бы избежать использованияBoost (хотя он доступен, если нет другой опции)
- Я знаю о
boost::ptr_container
контейнерах (то есть boost::ptr_vector
), но я бы хотел избежать этого, потому что он ломает отладчик (внутренностихранится в void *
с, что означает, что трудно увидеть объект, фактически сохраненный в контейнере в отладчике)