不初始化指针和将指针初始化为null的区别是什么?



我正在创建一个简单的通用引擎,这是我制作游戏的真正开始,我试图在制作引擎的过程中保持一定的组织和体面,这意味着我不希望它成为我在制作完我的计划后就被扔到一边的东西。

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

如果他们确实有动画,我想初始化一个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++中实现(就像你写的那样),为什么不使用c++标准库呢?像

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

最新更新