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