Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   TList als IntegerList (https://www.delphipraxis.net/162715-tlist-als-integerlist.html)

Bjoerk 2. Sep 2011 14:20

TList als IntegerList
 
DeddyH,

du last vorhin bei diesem LottoTipp Thread eine TList als Integerlist benutzt, und dieser Werte zugewiesen List.Add(Pointer(I)) und ausgelesen mit Integer(List[I]). Finde ich ziemlich genial, ich raff‘s nur nicht. Weshalb kommt man denn da ohne New und Dispose aus ?

DeddyH 2. Sep 2011 14:22

AW: TList als IntegerList
 
Pointer sind ja eigentlich auch nichts anderes als ganze Zahlen, deshalb kann man sie recht problemlos hin und zurück casten. Und da ich hinter den "Pointern" keine echten Daten hinterlege, kann ich mir New() und Dispose() dann schenken.

Neutral General 2. Sep 2011 14:23

AW: TList als IntegerList
 
Naja. Pointer sind ja so gesehen nur Integer (also Zahlen) die eine Adresse enthalten. Also kann man einen Integer einfach auf einen Pointer casten und in der Liste speichern.

Im Prinzip ist TList eine Liste von Adressen (= Zahlen)

Bjoerk 2. Sep 2011 14:29

AW: TList als IntegerList
 
Okay, verstehe, es gibt ja gar keine dahinterliegenden Daten. Thanx.

jaenicke 2. Sep 2011 14:33

AW: TList als IntegerList
 
Vorsicht, ein Integer ist ein 32-Bit Wert, ein Pointer kann aber 32-Bit oder 64-Bit haben ab XE2, deshalb ist dieser Cast schlecht. ;-)

Nebenbei geht ab Delphi 2009 auch das als Typ, falls es eine solche Version mal werden sollte:
Delphi-Quellcode:
TList<Integer>

DeddyH 2. Sep 2011 14:41

AW: TList als IntegerList
 
Erstens ging es dort um Zahlen im Bereich 1 - 49, zweitens spielen die 64Bit-Pointer wohl erst in einem 64Bit-Programm eine Rolle (also XE2) und drittens ging es in dem Thread um Delphi 5 IIRC.

Neutral General 2. Sep 2011 14:46

AW: TList als IntegerList
 
Abgesehen davon macht es so rum nichts aus.

bei Cast von Integer (32-Bit) auf Pointer(64-Bit) gehen ja keine Daten verloren.
Also ist das unbedenklich.

Nur der umgekehrte Weg ist natürlich (ab 64-Bit) etwas problematisch.

DeddyH 2. Sep 2011 14:50

AW: TList als IntegerList
 
Klar, problematisch wird es immer dann, wenn man einen größeren Datentyp in einen kleinen wandelt, das kann Datenverlust bedeuten, wenn der Bereich des kleineren für den Wert nicht mehr ausreicht. Deshalb muss man schon wissen, was man tut.

himitsu 2. Sep 2011 14:55

AW: TList als IntegerList
 
Ab Delphi 2009 könnte man es ja problemlos mit den Generics machen.
Delphi-Quellcode:
type TIntegerList = TList<Integer>;

DeddyH 2. Sep 2011 14:56

AW: TList als IntegerList
 
Siehe #5.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:45 Uhr.
Seite 1 von 2  1 2      

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