Использование std :: unique_ptr со стандартными контейнерами - PullRequest
7 голосов
/ 09 января 2011

Я искал способ сделать безопасные векторы и карты динамических указателей, когда я понял, что C ++ 11 добавляет unique_ptr s.Я изучил, как использовать их в Google, но не смог найти подробности.Что мне нужно знать, так это:

  1. Что конкретно отличается между указателями и unique_ptr с, кроме автоматического сбора памяти?
  2. Как мне удалить unique_ptr с вектора или карты?Есть ли какой-то специальный код, который я должен использовать, кроме стирания итератора?

Ответы [ 2 ]

13 голосов
/ 09 января 2011
  1. Ничего.unique_ptr - это просто оболочка вокруг указателя, которая удаляет указатель при уничтожении unique_ptr.У него нет накладных расходов (как и шаблон auto_ptr, который он заменяет).
  2. Нет - он просто будет работать.Трудность на самом деле заключается в вставке указателя в вектор или карту - тогда как вы должны переместить unique_ptr в контейнер.
4 голосов
/ 09 января 2011
  1. Разница в том, что unique_ptr подчиняется семантике перемещения. Кроме того, как следует из названия, вы не можете делать его копии.

  2. Стирание элемента std::vector<std::unique_ptr<T> > эффективно удалит все, на что указатель указывает.

...