хранение указателей на auto_ptr в векторе - PullRequest
0 голосов
/ 28 января 2012

Можно ли хранить указатели на auto_ptr (s) в std :: vector?Это безопасно?

Я перечисляю чтение папки в файлах XML и создаю объект для каждого с помощью auto_ptr.Я не знаю заранее, сколько будет XML-файлов, и я хотел бы использовать вектор, чтобы фактически сохранить список указателей на них.

Я также предполагаю, что когда указатели удаляютсяиз вектора (или вектора уничтожен) указатели в значительной степени исчезли, поэтому мне не пришлось бы беспокоиться об установке их в NULL.

Ответы [ 2 ]

4 голосов
/ 28 января 2012

Вы не можете хранить auto_ptr в std::vector, но хранение простого указателя хорошо, даже если то, на что он указывает на , является auto_ptr.

Я не понимаю, почему вы хотите это сделать, хотя.Весь смысл auto_ptr состоит в том, чтобы гарантировать, что объекты, выделенные в куче, удаляются автоматически, когда они выходят из области видимости.Вы потеряете это преимущество, если сам auto_ptr придется удалить вручную.

Если вы хотите безопасно хранить объекты, выделенные в куче, в векторе, вы можете использовать std::tr1::shared_ptr вместо auto_ptr или использоватьКонтейнеры указателей Boost.Или, если вы используете C ++ 11, std::unique_ptr похож на std::auto_ptr, за исключением того, что его безопасно использовать в контейнерах.

0 голосов
/ 28 января 2012

Да, вы могли бы - но это совершенно небезопасно и будет делать все неожиданные вещи, которые вас удивят.

Если вы хотите хранить умные указатели в контейнере, посмотрите на unique_ptr, если ваш компилятор поддерживаетC ++ 11 материал

...