指针成员神秘地被删除?

时间:2015-02-23 02:31:32

标签: c++ pointers

所以我有一个带有指针的ClassA,以及一个为该指针赋值的函数:

class ClassA
{
private:
    SomeType* _someType;

public:
    void AssignSomeTypePtr(SomeType* someType) 
    {
        _someType = someType;
    }
};

然后我有ClassB创建SomeType指针,并将它分配给我的ClassA类,它们保存在向量中:

class ClassB
{
private:
    std::vector<ClassA> _classes;

public:
    void MakeSomePointers(unsigned char* rawData)
    {
        SomeType* someType = reinterpret_cast<SomeType*>(rawData);
        for (auto A : _classes)
        {
            A.AssignSomeTypePtr(someType);
        }
    }
};

当我想从我的ClassA类调用一个函数时出现问题,该类利用了以前由ClassB分配的SomeType指针。出于某种原因,_someType不再保存ClassB分配的地址(它在ClassA构造函数中恢复为初始值,为null)。

我几个小时都在摸不着头脑,想弄清楚什么是错的。我一直在编码基本上不间断4-5个小时,所以我可能已经打到那个我犯了一个基本错误的时间段,但由于某种原因,它已经过了我的脑袋。我已经确认通过AssignSomePtr函数分配的指针确实包含一个有效的地址,并且_someType确实被分配了该值。但是当我在ClassA类中调用一个使用该指针的函数时,突然_someType == null。顺便说一句,我在调用此函数之前分配值。

关于可能出现什么问题的任何想法?

P.S。我知道指针等于坏消息。不幸的是,我正在为一个3D游戏编写一个文件序列化库,它有一种非常独特的存储数据的方式,所以像boost这样的序列化库对我没有帮助。

1 个答案:

答案 0 :(得分:2)

如果for周期写在原始帖子中,则A是当前向量元素的本地副本。在for周期的每次迭代中,您将指针值分配给vector元素的副本,然后立即销毁该副本。载体本身保持不变。

如果要修改实际的矢量元素,则必须将循环变量声明为参考

for (auto &A : _classes)