Сохранение объекта в shared_ptr
Есть у меня такая функция
void process(const std::vector<std::unique_ptr<CMapObject>> & array);
В этой функции мне нужно вытащить и сохранить все CMapObject. Делаю так
std::shared_ptr<CMapObject> save_obj; // На самом деле это поле класса
void save(const std::shared_ptr<CMapObject> & obj) {
save_obj = obj;
}
void process(const std::vector<std::unique_ptr<CMapObject>> & array) {
std::for_each(
array.cbegin(),
array.cend(),
[this](const std::unique_ptr<CMapObject> &mapObj) -> void {
save(mapObj);
}
);
}
На вызове save(mapObj); получаю ошибку
cannot convert argument 1 from 'const std::unique_ptr<CMapObject,std::default_delete>' to 'const std::shared_ptr &'
Аналогичная ошибка при вызове
save(std::move(mapObj));
А как должно быть? У сохраненного объекта mapObj будут вызываться только const методы
Ответы (1 шт):
Автор решения: Никита Самоуков
→ Ссылка
Ненужно const.
std::shared_ptr<int> save_obj; // На самом деле это поле класса
void save(const std::shared_ptr<int> & obj) {
save_obj = obj;
}
void process(std::vector<std::unique_ptr<int>>& array) {
std::for_each(
array.begin(),
array.end(),
[](std::unique_ptr<int> &mapObj) -> void {
save(std::move(mapObj));
}
);
}