Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.168 Beiträge
 
Delphi 12 Athens
 
#2

Re: static array in einem dynamic array freigeben?

  Alt 2. Jun 2006, 14:26
Also das Static Array und Records werden im Grunde genause behandelt, wie ein einfacher Integer ... sie liegen direkt im Speicherbereich des dynamischen Arrays.

Außerdem ist
T = Array[0..4] of Integer vom Speicheraufbau genau das selbe, wie
Delphi-Quellcode:
T = Record
  i1: Integer;
  i2: Integer;
  i3: Integer;
  i4: Integer;
  i5: Integer;
End;
und natürlich
Delphi-Quellcode:
T = Record
  i1, i2, i3, i4, i5: Integer;
End;
sogar das wäre das Selbe
Delphi-Quellcode:
T = Record
  i1, i2: Integer;
  Case Integer of
    0: (i3, i4, i5: Integer);
End;
oder das
Delphi-Quellcode:
T1 = Record
  i1, i2: Integer;
End;
T2 = Record
  i3, i4, i5: Integer;
End;
T = Record
  R1: T1;
  R2: T2;
End;
Und was weiß ich noch alles

Es sind alles halt immer 5 Integer hintereinander.


So, nun nochmal zur Frage.
Die Static Arrays und Records werden allso immer freigegeben (egal wie man den Eintrag entfernt ... man muß nur bei anderen Metoden aufpassen was darin ist ... Strings sind ja wieder Pointer, da ist das manchmal etwas schwieriger)

Da du aber jeden Eintrag einzeln und über "normale" Zuweisungen verschiebst/kopierst, greift dir die CompilerMagig kräftig unter die arme und du brauchst dich um das Freigeben der dynamischen Arrays und Strings keine Sorgen zu machen, denn diese werden automatisch gelöscht (da fügt der Compiler die nötigen Befehle mit ein)


Schwieriger würde es allerdings, wenn du die zu verschiebenden Einträge alle auf einmal verschiebst (per CopyMem oder Co.), denn dann weiß der Compiler ja nicht, daß da eventuell was freigegeben werden müßte und man muß sich da wirklich selber drum kümmern ... der Vorteil wäre allerdings, das es wesendlich schneller wäre.
Wobei dein jetziger Weg (wenn er nicht all zu langsam ist) natürlich für einen "Anfänger", der vom internen Aufbau der Typen nicht viel Ahnung hat, vorteilhafter und weniger Fehleranfällig ist ... denn wenn du die automatischen Dinge umgehst, dann entsteht schnell mal ein MemoryLeak.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat