2

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

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 向量中删除一个元素,它会导致 spritechild 向量发生内存泄漏,还是已经解决了?

谢谢!

4

4 回答 4

1

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

当您通过创建对象new而不delete这样做时,您会遇到内存泄漏。

于 2012-06-14T23:35:29.530 回答
0

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

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

然而,仅仅删除一个用 new 成功分配的对象不会导致内存泄漏。

于 2012-06-15T00:03:19.007 回答
0

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

于 2012-06-14T23:37:39.357 回答
0

如果你不搞砸,它会得到照顾SpriteChild。如果它在构造函数中分配了一些东西,请确保在析构函数中释放它。IIRC与其成员的默认可见性struct没有太大区别。classpublic

于 2012-06-14T23:38:00.200 回答