память — Когда удаляются объекты? Влияние создания объектов Переполнение стека

Я помогаю программировать игру на C ++ для Nintendo DS (около 3 МБ оперативной памяти). Для всех меню интерфейса «кнопка» создавалась путем вызова функции void, которая устанавливает фоновые плитки на кнопку. В интерфейсе не менее 30 кнопок. Теперь я создал класс кнопки, который сохранил свою позицию, метку вместе с другими значениями данных. Теперь мой вопрос:

Будут ли все эти новые объекты кнопки влиять на использование ОЗУ (или другие аспекты производительности) после того, как программа покинет область объекта?

Или объект будет автоматически отброшен, когда программа покинет функцию, в которой она была создана?

Вот некоторый код:

#include "Button.h"
void titlescreen() //Called to create main menu
{
Button singlePlayer = Button(4, 5, "Single Player");
//Creates button at coord (4,5)

Button multiPlayer = Button(4, 8, "Multi Player");
bool chosen = false; //Whether an option has been clicked

while(!chosen)
{
//Menu stuff here
}
}

button.h:

#include <stdio.h>
#ifndef BUTTON_H
#define BUTTON_H

class Button
{
public:
int length;
int x, y;
bool isColored;
void setColored(bool);
void setDefault();
button(int, int, const char * const); //Constructor
button(int, int, const char * const, int); //Constructor
};#endif  /* BUTTON_H */

3

Решение

Хотя вашей терминологии не хватает, код, который вы написали, распределяет объекты «в стеке» и, таким образом, действует только в течение вашей области видимости.

На самом деле, вы можете написать это еще более кратко:

//Button singlePlayer = Button(4, 5, "Single Player");  // bad, uses the copy constructor
Button singlePlayer(4, 5, "Single Player");             // uses just a constructor call

В любом случае, важно помнить, что, поскольку вы используете «стек» для хранения ваших объектов, независимо от того, «выделяете» вы их или «освобождаете» их «использование ОЗУ» не изменится. «Стек» в большинстве реализаций — это заранее выделенный кусок памяти, который никогда не расширяется, он просто генерирует исключения переполнения стека (или ваш каркасный эквивалент, я думаю, у С есть сигнал для этого?), Когда он заполняется. Поэтому, вообще говоря, использование вашего «стека» на объектах — плохая идея.

5

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

Да, объекты разрушаются, когда они выходят за пределы области видимости (т.е. деструктор Buttonназываются). Так singlePlayer а также multiPlayer будет уничтожен, когда программа вернется из функции titlescreen,

Итак, пока деструктор Button очищает все, кнопки не влияют на использование оперативной памяти после возврата функции.

Кроме того, вы должны включить заголовочный файл C ++ cstdio вместо c-заголовка stdio.h,

6

По вопросам рекламы [email protected]