矢量迭代器不能与 std::shared_ptr<> 取消引用



我在std::find后从vector中取消引用找到的shared_ptr时遇到问题。有人可以解释为什么会这样吗?

extern std::vector< shared_ptr<King::Actor> > selected
foo(const std::vector<std::shared_ptr<Actor>> &playerUnits)
{
std::vector<std::shared_ptr<Actor>>::const_iterator result;
result = std::find(std::begin(playerUnits), std::end(playerUnits), selected.back());
if (result != std::end(playerUnits))
return *std::next(result); // found
return nullptr;
}
enter code here

最接近的答案是 https://stackoverflow.com/questions/301959/vector-iterator-not-dereferencable#=我相信它既找到了它,又找到了向量的末尾,但它仍然报告不可取消引用。

if (result != std::end(playerUnits))
return *std::next(result); // found

如果找到的结果是最后一个,std::next将生成end,然后取消引用。

最新更新