Objekt wird in if - Verzweigung erstellt. Delete notwendig?



  • Hallo Freunde! 😉
    Hier mein code

    if (open_menu)
    {
    Menu *menu = new Menu(window);
    (*menu).open_menu();
    open_menu = false;
    }

    Die Klasse Menu ist extern und der header ist included 😉
    Benötige ich hier noch die delete funktion um das Objekt nach der der if-Verzweigung aus dem temporären Speicher zu löschen, oder geschieht das automatisch, weil der Geltungsbereich überschritten ist? 😉



  • Mafyou schrieb:

    Benötige ich hier noch die delete funktion um das Objekt nach der der if-Verzweigung aus dem temporären Speicher zu löschen,

    Kommt drauf an, ob das Objekt danach noch gebraucht wird. Wenn nicht, solltest du hier gar nicht new und delete verwenden. Wenn doch, hast du das Problem, dass du an den Speicher nicht mehr herankommst, weil der einzige Zeiger darauf nicht mehr existiert.

    Mafyou schrieb:

    oder geschieht das automatisch, weil der Geltungsbereich überschritten ist? 😉

    Nein.



  • Heißt das wenn ich das Objekt ohne "new" und ohne Pointer erstell, dann wird es nach der if Bedingung direkt vom RAM gelöscht? Und wenn ich das Objekt mit new und Pointer erstelle, dann muss ich das Objekt noch innerhalb der if-Verzweigung mit delete löschen um das Objekt vom RAM zu löschen ? 😉



  • Ohne new wird das Objekt beim nächsten } Zeichen gelöscht

    Mit new wird es nur gelöscht, wenn du delete aufrufst.

    Ich bin mal gespannt, was bei dein Spiel am Ende rauskommt 🙂

    Wird das ein Konsolenspiel oder so richtig mit Pixelgrafiken?



  • Mafyou schrieb:

    Heißt das wenn ich das Objekt ohne "new" und ohne Pointer erstell, dann wird es nach der if Bedingung direkt vom RAM gelöscht?

    Automatische Variablen (so nennt man die) werden am Ende ihres Gültigkeitsbereichs zerstört. Ich weiß nicht, was du mit "vom RAM löschen" genau meinst, und ich fürchte, du auch nicht.

    Mafyou schrieb:

    Und wenn ich das Objekt mit new und Pointer erstelle, dann muss ich das Objekt noch innerhalb der if-Verzweigung mit delete löschen um das Objekt vom RAM zu löschen ? 😉

    Das mit new erzeugte Objekt "überlebt" den if-Block. Es wird nicht automatisch gelöscht. Aber für delete brauchst du den Zeiger, den new dir gibt. Und der ist bei deinem Code automatisch (siehe oben), existiert also nach dem Block nicht mehr. Damit kommst du an das Objekt nicht mehr heran.

    Die wichtige Frage ist, wie lange soll das Objekt leben.



  • XMAMan schrieb:

    Wird das ein Konsolenspiel oder so richtig mit Pixelgrafiken?

    Wird ein Game mit Kombination aus Quizgame, Leveln(Jump'n Run und Tile grafics etc. 😉



  • Mafyou schrieb:

    Hallo Freunde! 😉
    Hier mein Code:

    if (open_menu)
    {
    Menu *menu = new Menu(window);
    (*menu).open_menu();
    open_menu = false;
    }

    Die Klasse Menu ist extern und der header ist included 😉
    Benötige ich hier noch die delete funktion um das Objekt nach der der if-Verzweigung aus dem temporären Speicher zu löschen, oder geschieht das automatisch, weil der Geltungsbereich überschritten ist? 😉

    1. kannst den Pfeiloperator verwenden, um das kürzer zu schreiben: menu->open()
    2. Dir geht nach dem if Block der Verweis auf den Speicher verloren. menu beinhaltet die Adresse, wo das Objekt im Speicher liegt. Du hast also ein Memory Leak.

    Lösungen:
    a.) Du rufst in der letzten Zeile des if Blocks ein delete auf.
    b.) Besser: du machst dir das Leben einfach, und verzichtest auf new und delete:

    {
    ...
    Menu menu(window);
    menu.open_menu();
    ...
    }
    


  • Dieser Thread wurde von Moderator/in rapso aus dem Forum Spiele-/Grafikprogrammierung in das Forum C++ (alle ISO-Standards) verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Das delete sollte hier nicht notwendig sein, weil genauso das new nicht notwendig ist

    LG


Anmelden zum Antworten