我对 C++ 并不陌生,但我通常主要使用 C# 和其他托管语言工作,所以我不太精通共享指针等。
我基本上有一个 shared_ptrs 到自定义类对象的 3 维映射(用于 3d 目的)。
这些 shared_ptrs 存在于地图中,并在整个项目中被引用,到目前为止一切都很好。对于一个特定的功能,我将其中一些 shared_ptrs 存储在一个向量中,以便稍后在代码中进行迭代,但这似乎是事情发生故障的地方。
假设我有 100 个这些对象,它们的指针存储在 3d 地图中,其中 3 个被添加到向量中,因为它们具有特殊的功能属性。当我遍历向量时,我在这 3 个对象上调用函数。这一切正常,直到 for 循环(用于迭代)在向量的元素 [1] 上第二次运行,此时元素 [0] 充满了损坏的数据(但元素 [1] 需要访问元素 [0 ] 来执行其中一项功能),这就是我得到错误的地方。
正如我所说,我对 shared_ptrs 不是很精通,但我认为数据不会被破坏,因为实际对象是在创建 3 维地图时创建的——而且,向量还没有消失范围,因为我只在 for 循环的第二次运行(有 3 个对象和 3 次迭代)。
我知道我一定是做错了什么,但我不知道如何进一步调试 - 基本上当我单步执行代码并进入 for 循环的第二次运行时,如果我查看元素 [0] 中的 shared_ptr向量(使用VS)它都被破坏了。
这是代码的循环,因此您可以看到。向量是在此代码所在类的构造函数中创建的,而地图(创建 shared_ptrs 和对象的位置)在应用程序的主类中。此外,getAdjacent 将 objA 和 objB 作为指针,因此用 objA 的相邻对象的数据“填充”objB:
for(vector<shared_ptr<ObjectClass>>::iterator iterator = objects.begin(); iterator != objects.end(); iterator++)
{
shared_ptr<ObjectClass> objA = (shared_ptr<ObjectClass>) iterator->get();
shared_ptr<ObjectClass> objB;
m_3DMap->getAdjacent(objA, objB);
objA->move(objB);
}
会不会和我的演员阵容有关iterator->get()
?我看不到任何其他方法可以做到这一点,因为如果我没有那个演员,VS 说它不能从 ObjectClass* 转换为 shared_ptr,这对我来说也很困惑,因为我认为我有一个 shared_ptrs 的向量? ..
感谢您的宝贵时间,如果有人可以提供帮助,那就太好了。