不初始化指针和将其初始化为null有什么区别?

时间:2012-12-25 22:54:58

标签: c++ struct null initialization declare

我正在为游戏制作的真正开始构建一个简单的通用引擎,我正试图在制作我的引擎时以某种方式组织和体面,这意味着我不希望它是我抛出的东西一旦我做了我正在计划的事情就到了一边。

我添加要显示的对象,drawObject,这些可以移动,不移动,动画,或者没有动画。

如果他们有DO动画,我想初始化一个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个小时?或者更多。 谢谢!

2 个答案:

答案 0 :(得分:3)

将指针设置为NULL意味着您将能够添加ASSERT(ptr != NULL);并且知道您的指针不会意外地包含一些垃圾值,而这些垃圾值不会出现在它正在使用的内存中。

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

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

请注意,保留未初始化的变量意味着它可以在其有效范围内具有任何值[对于某些类型,在有效范围之外 - 例如指针和浮点值可以是“处理器不允许的值”。这意味着如果它已经被初始化,那么在代码中“告诉”是不可能的 - 但是如果你没有初始化东西,事情将会发生严重的错误!

答案 1 :(得分:3)

如果这应该在C ++中真正实现(在编写时),为什么不使用C ++标准库?像

struct animationSetS {
    std::vector< std::shared_ptr<animationComp> > animation;
    // ...
}