Я помогаю программе игры в C++ для Nintendo DS (у нее около 3 МБ ОЗУ). Для всех меню в интерфейсе используется «кнопка», вызываемая функцией void, которая устанавливает фоновые фрагменты на кнопку. В интерфейсе имеется по меньшей мере 30 кнопок. Теперь я создал класс кнопок, который сохранил свою позицию, метку вместе с другими значениями данных. Теперь у меня вопрос:Когда объекты удаляются? Воздействие создания объектов C++
Все ли новые объекты кнопки влияют на использование ОЗУ (или другие аспекты производительности) после того, как программа покинет область действия объекта?
Или объект автоматически будет отброшен после того, как программа покинет функцию, в которой она была создана?
Вот код:
#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 */
'Button' в представленном коде создаются с автоматическим хранилищем и поэтому будут освобождены при возвращении 'titlescreen()'. – dlf
Но это должно быть 'class Button' (с капиталом« B »)? – dlf
Как только объект значения (без использования нового оператора) выходит из области видимости, он уничтожается. Объект помещается в стек. Если новый оператор используется для получения указателя на объект, он должен быть явно удален с ключевым словом delete в какой-то момент, который должен быть удален из памяти. Используйте прежний КОГДА ВЫ можете. Это быстрее и безопаснее. Это также может быть даже безопаснее, чем обычная сборка мусора, потому что вы знаете ТОЧНО, когда что-то происходит. – Ben