garbage collector - string[] kopieren



  • hallo,

    mal eine grundsätzlich frage, zum thema "wer räumt auf"

    string[] a = { "a","b","c" };
    string[] b = { "e","f","g" };
    
    string[] c;
    
    // später zur laufzeit
    c = a;
    // mach irgendwas, dann ...
    c = b;
    

    muss man c vor der zweiten zuweisung ( was ja in C# ein kopie ist, oder ? ) mit delete löschen oder macht das der GC ?



  • nein musst du nicht - man loescht nur sachen die IDisposable implementieren //name kann variieren, bin grad nicht sicher

    in deinem beispiel wird nur die referenz von c auf b umgebogen
    der gc merkt dann (irgendwann) das die alten daten auf die c mal zeigte nirgends mehr verwendet werden und raeumt dann auf



  • besten dank für die antwort ! 👍

    ja, da muss man sich als alter C++ programmierer erstmal dran gewöhnen, dass jetzt andere die aufräumarbeit machen 😃



  • als alter c++ler kannst du dir in deinem beispiel c als ein pointer betrachten der einmal auf a und dann auf b zeigt
    am sonsten hast du (fast) recht - um das auiraeumen kuemmert sich nun der gc
    ausnahmen sind wie gesagt alle funktionen die IDisposable implementieren
    da muss man dann am ende
    Close() oder Dispose(x) aufrufen - je nachdem was es ist
    (da bietet es sich an "using(bla = fasel)" zu verwenden, dann wirds auch nach ende des blocks automatisch aufgeraeumt


Anmelden zum Antworten