В чем разница между не инициализацией указателя и его инициализацией в null?

Я создаю простой общий движок для моего истинного начала в создании игр, и я пытаюсь быть каким-то образом организованным и порядочным в создании своего движка, то есть я не хочу, чтобы это было чем-то, что я отбрасываю в сторону как только я сделаю то, что я планирую.

Я добавляю объекты для отображения, drawObjects, и они могут либо двигаться, либо не двигаться, либо иметь анимацию, либо не иметь ее.

В случае, если у них есть анимация, я хочу инициализировать один animationSet, и это animationSet будет ххх animationComp внутри него. Поскольку я стараюсь быть аккуратным и работаю над «оптимизацией» в отношении использования памяти и процессора (например, совместное использование уже загруженных указателей изображений и всего, что приходило мне в голову), я хотел не спрашивать о возможной неиспользуемой памяти в массивах ,

Итак, я имел 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 час возможно? Или больше.
Спасибо!

0

Решение

Установка указателя на NULL означает, что вы сможете добавить ASSERT(ptr != NULL); и ЗНАЙ, что твой указатель случайно не содержит какого-либо мусорного значения из того, что находится в памяти, которую он использовал.

Итак, если по какой-то причине вы в конечном итоге используете объект до того, как он будет правильно настроен, вы можете обнаружить его.

Это также помогает, если вы иногда не используете поле, вы все равно можете позвонить delete stuff; [при условии, что он выделен в первую очередь].

Обратите внимание, что оставление переменной неинициализированной означает, что она может иметь ЛЮБОЕ значение в пределах ее допустимого диапазона [и для некоторых типов вне допустимого диапазона — например, указатели и значения с плавающей запятой могут быть «значениями, которые не разрешены процессором»]. Это означает, что в коде невозможно «сказать», был ли он инициализирован или нет — но если вы не инициализируете что-то, все пойдет ужасно неправильно!

3

Другие решения

Если это действительно должно быть реализовано в C ++ (как вы пишете), почему бы вам не использовать C ++ Standard Library? подобно

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

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector