我正在使用c ++为Nintendo DS编程游戏(它有大约3MB的RAM)。对于界面中的所有菜单,过去通过调用void函数创建“按钮”,该函数将背景图块设置为按钮。整个界面至少有30个按钮。现在我创建了一个按钮类,它存储了它的位置,标签以及其他数据值。现在我的问题是:
在程序离开对象范围后,所有这些新按钮对象是否会影响RAM使用(或其他性能方面)?
或者,一旦程序离开创建的函数,对象会自动被丢弃吗?
以下是一些代码:
#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 */
答案 0 :(得分:6)
是的,对象在超出范围时被销毁(即调用Button
的析构函数)。因此,当程序从函数singlePlayer
返回时,multiPlayer
和titlescreen
将被销毁。
因此,只要Button
的析构函数清除了所有内容,按钮就不会影响函数返回后的RAM使用情况。
此外,您应该包含C ++头文件cstdio
而不是c-header stdio.h
。
答案 1 :(得分:5)
虽然您的术语不足,但您编写的代码会在“堆栈”中分配对象,因此只能与您的范围一样长。
事实上,你可以更简洁地写出来:
//Button singlePlayer = Button(4, 5, "Single Player"); // bad, uses the copy constructor
Button singlePlayer(4, 5, "Single Player"); // uses just a constructor call
无论如何,您应该注意的一件重要事情是,因为您使用“堆栈”来保存您的对象,无论您是否“分配”或“释放”它们“RAM使用”不会改变。大多数实现中的“堆栈”是一个预先分配的内存块,它永远不会扩展,只是在它填满时抛出堆栈溢出异常(或者你的框架等效,我认为C有信号吗?)。因此,通常在对象上使用“堆叠”是一个坏主意。