new Operator



  • Hallo,

    int[] array = new int[5];
    

    Was passiert jetzt

    array = new int[10];
    

    und dann nochmal

    array = new int[8];
    

    array zeigt jetzt immer auf einen anderen Block . Was passiert mit den anderen ?
    Werden die oben angelegten speicherplätze einfach gelöscht ? Aber delete hab ich nicht explizit ausgeführt ?



  • blurry333 schrieb:

    Was passiert mit den anderen ?
    Werden die oben angelegten speicherplätze einfach gelöscht ? Aber delete hab ich nicht explizit ausgeführt ?

    Was soll das sein, "gelöscht", "delete"? Sowas gibt es in C# nicht.

    Falls es keine andere Referenz auf die erzeugten Objekte gibt, bleibt deren Speicher bis zur nächsten Garbage Collection belegt und steht danach wieder zur Verfügung. (Wegen der Generationen ist es ein wenig komplizierter, aber das ist die Grundidee.)



  • dispose gibt es doch. Sobald ich array mit new was neues zuweise sind doch die anderen Blöcke verloren ?



  • blurry333 schrieb:

    dispose gibt es doch.

    Und?

    Sobald ich array mit new was neues zuweise sind doch die anderen Blöcke verloren ?

    Ja.



  • aber jetzt kommts. Ich hab die anderen Blöcke jeweils in einer Liste gespeichert.

    List<int[]> myListe = new List<int[]>() ;
    
    myListe.add(array);
    


  • Schön, dann sind sie ja doch nicht verloren.



  • blurry333 schrieb:

    aber jetzt kommts.

    Um dir und uns viele Nerven zu ersparen, verrate ich dir ein Geheimnis: C# hat Garbage Collection.



  • for(int i = 0 ; i<10;i++)
    {
    
    List<int[]> myListe = new List<int[]>() ; 
    
    myListe.add(array);
    
    array = new int[5];
    
    }
    


  • Jetzt geht die Liste verloren, bravo.



  • Ja ich kenn Garbage Collection . Und genau das ist meine Sorge. Habe Angst dass wenn ich mit array einen neuen Block anlege, der alte obwohl ich ja die Referenz in der Liste speicher, weg sein könnte.



  • blurry333 schrieb:

    Habe Angst dass wenn ich mit array einen neuen Block anlege, der alte obwohl ich ja die Referenz in der Liste speicher, weg sein könnte.

    Die Sorge ist unbegründet. Garbage Collection verwirft nur das, was nicht mehr erreichbar ist. Solange die Liste noch erreichbar ist, sind auch alle darin gespeicherten Objekte noch erreichbar.



  • So lange die Liste "lebt" bleiben die Inhalte erhalten und nix geht verloren. Der Garbage-Collector schlägt nicht einfach so zu und nimmt dir Speicher weg.

    Edit: Zu spät.



  • blurry333, jetzt mal ganz ernsthaft: Hast du überhaupt mal ein Programmierbuch komplett durchgearbeitet und verstanden? Nach über 700 Posts und mehreren Jahren die man sich schon mit der Materie beschäftigt, sollte man doch wenigstens in der Lage sein Fragen zu stellen die nicht auf solch derart niedrigen Anfängerniveaus liegen.

    Daher: Lies ein C# Buch. Komplett. Ohne dieses nach kurzer Zeit aus der Hand zu legen. Lies es ggf. mehrfach wenn dir etwas nicht klar ist. Und dann stell Fragen.

    Ansonsten muss du dir wirklich die Frage gefallen lassen ob du nur sinnlos trollen willst, oder ob du dir auch deine Schuhe noch von anderen zubinden lässt. Eigeninitiative ist in der Programmierung absolute Voraussetzung.



  • @asc
    Wir brauchen auch Putzkräfte.
    Ob die vorher ne HTL oder vielleicht sogar FH abgeschlossen haben ist dabei doch nebensächlich.



  • Warum diskutiert ihr eigentlich mit dem Bordtroll? Der postet doch seit Jahren sinnfreie Postings dieser Art. Also entweder ist er absolut lernbehindert, oder es ist pure Absicht. Jeder hat halt so seine Hobbies...



  • An euch Gofen ist auch nichts verdient.


Anmelden zum Antworten