std::shared_ptr
- это инструмент для управления владением памятью. Проблема в том, что std::vector
уже управляет своей памятью. Кроме того, std::vector
делает недействительными ссылки и указатели на его элементы при изменении размера или удалении элемента.
То, что вы, вероятно, хотите, это иметь два вектора общего ресурса. Этот ресурс будет разделен между двумя векторами:
// there are strings in the V2 already
std::vector<std::shared_ptr<std::string>> V1;
std::vector<std::shared_ptr<std::string>> V2;
for (auto ptr : V2) {
V1.push_back(ptr) // now works, ptr is a std::shared_ptr<std::string>
}
Что если вы не можете изменить тип V2
? Тогда вам придется обращаться к объекту по-другому, например, к индексам вектора и сохранять их синхронизированными при удалении элементов.