C ++ - 删除包含向量的结构向量会导致内存泄漏吗?

时间:2012-06-14 23:33:03

标签: c++ memory-management memory-leaks vector struct

我正在构建一个游戏,并且有一个名为sprites的对象向量。

struct Sprite
{
    SpriteType texture;     // The texture enumeration
    float x;                // The x position of the sprite
    float y;                // The y position of the sprite
    float xVel;             // The x velocity of the sprite
    float yVel;             // The y velocity of the sprite
    int imgBlockX;          // The x block in the image
    int imgBlockY;          // The y block in the image
    int numFrames;          // The number of frames in the sprite animation
    int curFrame;           // The current frame of animation
    int delay;              // The delay between frame switches
    int elapsed;            // The amount of time on this frame
    long lastTime;          // The last update time
    long curTime;           // The current update time
    bool loop;              // Does this animation loop?
    int lifespan;           // The max lifespan of the sprite
    int order;              // 0 for first 1 for last
    bool hasChildren;       // Is this a parent sprite?
    int maxSize;
    std::vector<SpriteChild> children;// The sprites that are linked to this one (die when this one dies)
};

正如您在底部所看到的,它包含一个sprite children的向量本身。如果我从我的精灵向量中删除一个元素,它会导致spritechild向量的内存泄漏还是由此处理?

谢谢!

4 个答案:

答案 0 :(得分:1)

您的矢量被分配为Sprite结构的成员(它不是通过new分配的),因此在删除Sprite时会自动清除它。

通过new创建对象而不delete时,会出现内存泄漏。

答案 1 :(得分:0)

无论你如何分配精灵向量,从中删除一个元素都将释放特定于该对象的向量children。相信SpriteChild不是指针类型的typedef,而是结构名称。

答案 2 :(得分:0)

如果你没有陷入SpriteChild,那将会得到照顾。如果它在构造函数中分配一些东西,请确保在析构函数中释放它。 IIRC structclass没有太大区别,只是它对其成员的默认public可见性。

答案 3 :(得分:0)

如果没有正确定义SpriteChild的析构函数,它只会导致泄漏 (I.E. SpriteChild的析构函数需要删除任何动态分配的 记忆)。

删除两次可能会导致崩溃。

但是,只删除成功分配了new的对象不应导致内存泄漏。