我正在构建一个游戏,并且有一个名为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向量的内存泄漏还是由此处理?
谢谢!
答案 0 :(得分:1)
您的矢量被分配为Sprite结构的成员(它不是通过new
分配的),因此在删除Sprite
时会自动清除它。
通过new
创建对象而不delete
时,会出现内存泄漏。
答案 1 :(得分:0)
无论你如何分配精灵向量,从中删除一个元素都将释放特定于该对象的向量children
。相信SpriteChild
不是指针类型的typedef,而是结构名称。
答案 2 :(得分:0)
如果你没有陷入SpriteChild
,那将会得到照顾。如果它在构造函数中分配一些东西,请确保在析构函数中释放它。 IIRC struct
与class
没有太大区别,只是它对其成员的默认public
可见性。
答案 3 :(得分:0)
如果没有正确定义SpriteChild的析构函数,它只会导致泄漏 (I.E. SpriteChild的析构函数需要删除任何动态分配的 记忆)。
删除两次可能会导致崩溃。
但是,只删除成功分配了new的对象不应导致内存泄漏。