Как лучше всего вернуть что-то вроде коллекции `std :: auto_ptr`s в C ++ 03?

std :: auto_ptr не может храниться в контейнере STL, например std :: вектор . Однако иногда бывают случаи, когда мне нужно вернуть коллекцию полиморфных объектов, и поэтому я не могу вернуть вектор объектов (из-за проблемы с нарезкой). Я могу использовать std :: tr1 :: shared_ptr и вставить их в вектор , но тогда мне придется заплатить высокую цену за поддержку отдельных счетчиков ссылок и объекта, которому принадлежит фактический память (контейнер) больше не логически «владеет» объектами, потому что они могут быть скопированы из нее без учета прав собственности.

C ++ 0x предлагает идеальное решение этой проблемы в форме std :: вектор > , но у меня нет доступа к C ++ 0x.

Некоторые другие примечания:

  • У меня нет доступа к C ++ 0x, но у меня есть доступный TR1 .
  • Я бы не хотел использовать Boost (хотя он доступен, если нет другого варианта)
  • Мне известны boost :: ptr_container контейнеры (т.е. boost :: ptr_vector ), но я бы хотел избежать этого, потому что он нарушает работу отладчика (внутренности хранятся в void * s, что означает, что в отладчике трудно просмотреть объект, фактически хранящийся внутри контейнера)
7
задан cHao 26 November 2011 в 05:42
поделиться