Сохранение объекта в 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));
        }
    );
}
→ Ссылка