Hallo,
ich bin inzwischen mit Delphi ganz gut vertraut, eine Anfängerfrage hat sich jedoch bis heute hartnäckig gehalten.
Auf Google hab ich es mit dem Suchbegriff "Array von Objektpointern freigeben" (u.ä.) probiert, wurde aber nicht fündig, bzw war unschlüssig, ob der jeweils beschriebene Fall mit meinem übereinstimmt.
Mein Problem:
In einer meiner Units sei eine Objektklasse deklariert, ich nenne sie hier mal
TBeispiel.
Von dieser gibt es einige Instanzen, quer über die ganze
Unit verteilt.
Ich fasse temporär einige davon in einem Array zusammen.
Delphi-Quellcode:
{...}
type
TBeispiel = class(TObject)
private
// ..
end;
var
Beispiel, Beispiel2: TBeispiel;
MehrBeispiele: array [0..5] of TBeispiel;
procedure {...}
var temp: array of TBeispiel;
begin
SetLength(temp, 4);
temp[0] := Beispiel;
temp[1] := MehrBeispiele[0];
temp[2] := MehrBeispiele[3];
temp[3] := Beispiel2;
end;
Meine Frage:
Wie gebe ich nach Abarbeitung meiner Prozedur das Array
temp wieder korrekt frei (die Objekte sollen dabei nicht zerstört werden)?
Ich habe hierzu schon mehrere Lösungen gesehen, einige bezogen sich aber vermutlich nur auf Arrays von einfachen Datentypen.
Welcher der folgenden Vorschläge ist für meinen Anwendungsfall der richtige?
Vorschlag 1:
SetLength(temp, 0);
Vorschlag 2:
temp := nil;
Reicht einer der beiden schon aus, oder ist es notwendig, zunächst alle
Pointer := nil zu setzen, wie bei
Vorschlag 3:
Delphi-Quellcode:
{...}
var i: integer;
{...}
for i := 0 to High(temp) do temp[i] := nil;
SetLength(temp, 0);
und
Vorschlag 4:
Delphi-Quellcode:
{...}
var i: integer;
{...}
for i := 0 to High(temp) do temp[i] := nil;
temp := nil;
Ich glaub ich hab es wieder geschafft, eine einfache Frage auf 2 Din A 4 Seiten auszubreiten
Da ich aber nicht mit allen Delphi Begriffen vertraut bin, kann ich nur so sicher sein, dass man mich richtig versteht.
Vielen Dank schonmal im Voraus für eure Hilfe!
Lieben Gruß
Xoric