Передать вектор 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_ptrs. С const std::unique_ptr<T> указатель не может быть переназначен, пока T указанный объект может быть изменен.

Другие вопросы по тегам