Я сейчас нахожусь в процессе изучения умных указателей и стараюсь избегать использования необработанных указателей.
У меня есть вектор с общими ptrs
std::vector<std::shared_ptr<View>> mChildren;
и метод Add and Remove
void View::AddChild(std::shared_ptr<View> view) {
mChildren.push_back(view);
}
void View::RemoveChild(std::shared_ptr<View> view) {
auto removal = std::remove(mChildren.begin(), mChildren.end(), view);
mChildren.erase(removal, mChildren.end());
}
Теперь в другой части моего кода у меня есть карта
std::map<std::weak_ptr<ModelGem>,std::unique_ptr<ViewGem>,std::owner_less<std::weak_ptr<ModelGem>>> mViews;
Теперь, когда я пытаюсь удалить элементы с карты следующим образом:
for (auto iterator = mViews.begin(); iterator != mViews.end();)
{
if (iterator->first.expired())
{
RemoveChild(iterator->second.get());
iterator = mViews.erase(iterator);
}
else
{
iterator++;
}
}
Теперь проблема заключается в следующем: iterator->second.get()
Он говорит, что не может преобразовать значение указателя типа в общий ptr.Однако, если я использую сырые указатели вместо общих указателей, это вообще не проблема.
Итак, мне интересно, будет ли в этом случае лучше просто использовать сырые указатели или я могу обойти это собщие указатели?