Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Record, Array, Class und Schreiben in das Array (https://www.delphipraxis.net/215468-record-array-class-und-schreiben-das-array.html)

haentschman 11. Jul 2024 09:59

AW: Record, Array, Class und Schreiben in das Array
 
Was passiert?
Delphi-Quellcode:
Releasesteps:=TProgreleaseClass.Create(true); //True = Liste ist Eigentümer der Items

myitem:=TProgreleaseitemClass.create; // erzeugen Item
releasesteps.add(myitem); // Item in Liste
myitem.Free; // Item wegwerfen ... auch auch aus der Liste. Die hällt nur dem Pointer auf das Objekt.
:zwinker:

PS: Müßte eine Zugriffsverletzung geben beim "Free" der Liste, weil der Poiner in der Liste schon freigegeben ist.
PS: Dein Code ist schwierig zu lesen wegen der ungewöhnlichen Einrückung und der ungewöhnlichen Groß/Kleinschreibung. :zwinker:

matashen 11. Jul 2024 10:34

AW: Record, Array, Class und Schreiben in das Array
 
Zitat:

PS: Müßte eine Zugriffsverletzung geben beim "Free" der Liste, weil der Poiner in der Liste schon freigegeben ist.
ja, hab das mit den Pointer vermutet :-(

mir hilft aber dann auch kein

Delphi-Quellcode:
progrelease.items[0]:=myitem,
denn dann wird ja auch nur der Pointer verschoben wenn ich das richtig verstehe. also doch im add die Werte in das Item schreiben - schade hatte gehofft es geht einfacher


Zitat:

PS: Dein Code ist schwierig zu lesen wegen der ungewöhnlichen Einrückung und der ungewöhnlichen Groß/Kleinschreibung.
Für die Profis unter euch brauchts halt ein Handicap das es nicht zu luschi ist :wink:

Danke für die Erklärung.

haentschman 11. Jul 2024 10:37

AW: Record, Array, Class und Schreiben in das Array
 
Lass das myItem.Free weg.:wink:
Delphi-Quellcode:
type
  TProgReleaseclass = class(TObjectlist<TProgreleaseItemClass>)
  //private
  //  FSelectedItem:Integer;
  //public
  //  property ItemIndex:Integer read FSelectedItem write FSelectedItem;
  // nicht nötig weil die Liste das kennt

end;

var
  ReleaseSteps: TProgreleaseClass;
  myItem: TProgreleaseitemClass;

  myObject: TProgreleaseitemClass; // anderes Objekt
...
Releasesteps := TProgreleaseClass.Create(True);
try
  myItem := TProgreleaseitemClass.Create;
  myItem.ProductID := 1234;
  myItem.MachineTypeName := 'Wunschkiste';
  myItem.ProgfieldName := 'Test';
  Releasesteps.Add(myItem);

  myObject := Releasesteps[0]; // Index aus der Liste
  myObject.MachineTypeName := 'Bla';

  // [B]myItem[/B] ist das gleiche wie [B]myObject[/B] weil der gleiche Pointer aus der Liste
finally
  Releasesteps.Free; // Alle Items werden feigegeben
end;

matashen 11. Jul 2024 10:42

AW: Record, Array, Class und Schreiben in das Array
 
Das heist beim Freigeben der gesamten Liste wirds dann automatisch mit weggeballert??

haentschman 11. Jul 2024 10:55

AW: Record, Array, Class und Schreiben in das Array
 
Zitat:

Das heist beim Freigeben der gesamten Liste wirds dann automatisch mit weggeballert?
...ja wenn der Owner des Objektes die Liste ist. Beim Erzeugen der Liste gibst du das an. http://docwiki.embarcadero.com/Libra...ectList.Create
Delphi-Quellcode:
Releasesteps := TProgreleaseClass.Create(True); // True = Liste ist Owner
...
PS: Bei einer TObjectlist<> ist der Owner standardmäßig immer True. Deshalb reicht auch
Delphi-Quellcode:
Releasesteps := TProgreleaseClass.Create;


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:40 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz