gpt4 book ai didi

c++ - 不初始化指针和将其初始化为空有什么区别?

转载 作者:太空宇宙 更新时间:2023-11-04 15:47:38 24 4
gpt4 key购买 nike

我正在构建一个简单的通用引擎,以便我真正开始制作游戏,并且我正在尝试以某种方式组织和体面地制作我的引擎,这意味着我不希望它成为我抛出的东西一旦我完成了我的计划,就把它放在一边。

我添加了要显示的对象,drawObject,它们可以移动、不移动、有动画,也可以没有。

如果他们确实有动画,我想初始化一个 animationSet,这个 animationSet 里面会有 xxx animationComp .因为我试图保持整洁并且已经对内存和 cpu 使用进行了“优化”(例如共享已经加载的图像指针,以及我想到的任何东西),所以我不想在数组中请求可能未使用的内存.

所以我有 animationSetS* animationSet = NULL; 最初,计划做一个 animationSet = animationSetS[spacesINEED]; 之后,只在我需要动画的对象上添加,那些不是动画的 NULL 因此不使用内存(正确吗?)。然后就出现了这个问题! (标题)

    struct animationComp {
SDL_Rect* clip;
int clipsize;
};

struct animationSetS {
animationComp* animation;
int currentFrame;
int currentAnimation;
int animationNumber;
};

struct drawObject { // Um objecto.
char* name;
SDL_Surface* surface;
bool draw = true;
float xPos;
float yPos;
bool willMove = false; // 0 - Won't move, 10 - Moves alot, TO IMPLEMENT
bool isSprite = false;
animationSetS* animationSet;
};

我的问题涉及很多,对此感到抱歉。对于此处的任何澄清回复,我会在接下来的 10 分钟内回复……也许 1 小时?或者更多。谢谢!

最佳答案

将指针设置为 NULL 意味着您将能够添加 ASSERT(ptr != NULL); 并且知道您的指针不会意外地包含来自任何发生在它正在使用的内存。

因此,如果出于某种原因,您在正确设置对象之前最终使用该对象,您可以检测到它。

如果您有时不使用某个字段,它也有帮助,您仍然可以调用 delete stuff; [假设它首先被分配]。

请注意,保持变量未初始化意味着它可以在其有效范围内具有任何值 [并且对于某些类型,在有效范围之外 - 例如指针和浮点值可以是“处理器不允许的值”]。这意味着不可能在代码中“告诉”它是否已初始化 - 但如果您不初始化,事情就会变得非常糟糕!

关于c++ - 不初始化指针和将其初始化为空有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14034560/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com