Einzelnen Beitrag anzeigen

Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: Objectlist rekursiv free?

  Alt 22. Nov 2010, 09:19
Das was du da machst ist irgendwie völlig sinnentleert.

Wenn ich eine ObjectList habe und setze OwnsObjects auf True, dann signalisiere ich: Ja, diese Liste kümmert sich irgendwann um das Entfernen aus dem Speicher.
Ist OwnsObjects auf False, dann heißt das, das die Objekte hier zwar aufgeführt werden, aber jemand anders kümmert sich um das Freigeben.

Was du hier machst, ist einen Designfehler in deiner Anwendung zu beheben und kann auch zu einem Zugriffsfehler führen.

Delphi-Quellcode:
OList1 := TObjectList.Create( True );
OList2 := TObjectList.Create( False );

Obj := TFooObj.Create;

OList1.Add( Obj );
OList2.Add( Obj );

for Obj in OList do
  begin
    OList2.Remove( Obj );
    if not OList2.OwnsObjects then
      Obj.Free; // Jetzt rummst es, da das Objekt OList1 gehört
  end;
Und hierzu for I := List.Count - 1 downto 0 do begin sei folgendes gesagt:
Der Compiler entscheidet ob vorwärts oder rückwärts gezählt wird, somit kann auch dieses hier in die Hose gehen
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo (22. Nov 2010 um 09:26 Uhr)
  Mit Zitat antworten Zitat