簡體   English   中英

什么時候刪除對象? 創建對象的影響c ++

[英]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的析構函數)。 所以, singlePlayermultiPlayer將被銷毀從功能時,程序返回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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM