Передать вектор unique_ptr в функцию, константную ссылку
Я обычно передаю вектор, содержащий необработанные указатели, например:
someFunc(const std::vector<MyClass*>& classList){..}
Интересно, можете ли вы сделать то же самое с unique_ptr следующим образом:
someFunc(const std::vector<std::unique_ptr<MyClass>>& classList){..}
? Означает ли это то же самое? То есть только для чтения.
1 ответ
Решение
Да, ты можешь. Нет, это не значит одно и то же: std::unique_ptr
представляет ресурс, который принадлежит указателю. Универсальный необработанный указатель может иметь много другой семантики.
Что касается правильности, доступ к элементам вектора с помощью итераторов или operator[]
будет давать постоянные ссылки на std::unique_ptr
s. С const std::unique_ptr<T>
указатель не может быть переназначен, пока T
указанный объект может быть изменен.