堆结构继承的腐败

时间:2011-06-29 19:39:49

标签: c++ structure

昨天我问this question这导致今天的问题(间接)。我使用以下代码获得了堆损坏:

typedef struct
{
    void SetPos(const Vector2& pos)
    {
        m_var1 = pos[0];
        m_var2 = pos[1];
    }

    Vector2 GetPos() const
    {
        return Vector2(m_var1, m_var2);
    }

    union
    {
        f32 m_var1;
        f32 m_var1DiffName;
    };

    union
    {
        f32 m_var2;
    };
}StructBase;

typedef struct Struct1 : public StructBase
{
    Vec4f   m_foo;

} Struct1;

typedef struct Struct2 : public StructBase
{
    Vector2   m_foofoo;

} Struct2;

typedef struct Struct3 : public StructBase
{
    Struct3()
    {
        SetPos(Vector2(0, 0));
    }

    Struct3(const Vector2& pos)
    {
        SetPos(pos);
    }
} Struct3;

每次我将Struct3添加到数组(Vector<>)时,调试器都会破坏信令堆损坏。如果我关闭了堆损坏检测,一切都会按预期工作,但是Visual Studio会在关闭应用程序时报告堆损坏。

修复问题的Struct3的更改:

typedef struct Struct3 : public StructBase
{
} Struct3;

现在我的猜测是我将POD结构与伪装成结构的类混合在一起,但这似乎是一个很长的镜头。我在这里做错了什么?

编辑:我添加构造函数的原因是我可以添加到Vector&lt;&gt;通过简单地将Vector3传递给Struct3&lt;&gt;这将构造Struct3并将其推入数组。所以我们假设向量是:vector<Struct3>然后我像这样添加了Struct3:myVec.push_back(Vector2(i, j));(向量&lt;&gt;在模板类中,其中类型可以是任何这些结构)。

注意:我改变了名字以避免踩到任何NDA。所以请忽略任何样式问题,除非它实际影响代码。由于代码相当简单,我粘贴了整个事情,我相信很多人已经知道,生产代码不可能一直存在。

0 个答案:

没有答案