Einzelnen Beitrag anzeigen

blackdrake

Registriert seit: 22. Aug 2003
Ort: Bammental
618 Beiträge
 
Delphi 10.3 Rio
 
#5

Re: Objekt in Array kopieren und anschließend freigeben

  Alt 30. Aug 2008, 21:09
Meinst du etwa so?

1. Ich entferne den Ressourcenschutzblock (Free) in der Funktion "Collect".

2. Ich gebe alle Arrayelemente in meinem Button OnClick nacheinander frei

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  x: TSubmissionArray;
  i: integer;
begin
  x := Collect;

  showmessage(x[2].MD5);

  // Array und seine Elemente werden ab hier nicht mehr gebraucht
  for i := 0 to high(x) do
  begin
    x[i].Free;
  end;
end;
Ist das sinnvoll? Eigentlich habe ich mir angewöhnt, überall einen Ressourcenschutzblock sofort einzubauen, nachdem man etwas mit Create() erstellt hat.

Die dieser Lösung jetzt dürfte man das Freigeben in der For-Schleife niemals vergessen, wenn man mit einem TSubmissionArray arbeitet, oder?

Gedankengang A:

Das TSubmissionArray "x" ist als Variable innerhalb von Button1Click deklartiert. Muss man die einzelnen Elemente überhaupt explizit freigeben? Oder wird dies automatisch gemacht, da der Array automatisch freigegeben wird (Ich glaube nicht, da er nur Referenzen enthält).

Gedankengang B:

Wäre es nicht besser, wenn ich in AddToArray() das TSubmission-Objekt irgendwie verdoppeln (einzigartig machen) könnte? Dann könnte ich meinen Ressourcenschutzblock behalten und müsste mich nicht um das Freigeben in einer For-Schleife kümmern. Nur wie macht man das?

Gruß
blackdrake
Daniel Marschall
  Mit Zitat antworten Zitat