[英]When are objects deleted? Impact of creating objects c++
我正在幫助用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 */
是的,對象在超出范圍時被銷毀(即調用Button
的析構函數)。 所以, singlePlayer
與multiPlayer
將被銷毀從功能時,程序返回titlescreen
。
因此,只要Button
的析構函數清除了所有內容,按鈕就不會影響函數返回后的RAM使用率。
此外,您應該包含C ++頭文件cstdio
而不是c-header stdio.h
。
雖然您的術語不足,但您編寫的代碼會在“堆棧”中分配對象,因此只與您的范圍一樣長。
實際上,您可以更簡潔地編寫它:
//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有信號嗎?)。 因此,通常在對象上使用“堆棧”是一個壞主意。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.