gpt4 book ai didi

c++ - 如何将 vector::iterator(在堆上)转换为 shared_ptr

转载 作者:太空宇宙 更新时间:2023-11-04 16:22:20 25 4
gpt4 key购买 nike

恐怕这方面的每个现有问题/答案似乎都略有不同:

我有一个 shared_ptr<vector<Point>> profile 使用迭代器循环。我想保留一个 shared_ptr<Point> 出于各种目的在循环外,但我在语法上苦苦挣扎。请您指点一下好吗?

这是一个基本的例子:

shared_ptr<Point> peak;
for (vector<Point>::iterator point=profile->begin(); point!=profile->end(); point++)
{
...
peak = shared_ptr<Point>(*point); // fails
...
}

注意我想使用指向 Point 的普通引用/指针会很简单,但我试图避免这种情况,特别是当涉及到堆时。我还意识到我可以在这种情况下使用索引,但这在容器类之间的可转移性较低。

最佳答案

你需要的是shared_ptr<vector<shared_ptr<Point>>>如果你想安全地绕过shared_ptr<Point>

你的问题是,如果你的 shared_ptr<vector<Point>>超出范围,任何shared_ptr<Point>vector 的成员构成将指向无效内存。

另一方面,如果您新创建的 shared_ptr<Point>超出范围,然后您将尝试释放由 vector 管理的内存这可不是什么好事!

关于c++ - 如何将 vector<T>::iterator(在堆上)转换为 shared_ptr<T>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15479301/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com