![]() |
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 ? |
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.
|
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) |
AW: TList als IntegerList
Okay, verstehe, es gibt ja gar keine dahinterliegenden Daten. Thanx.
|
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>
|
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.
|
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. |
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.
|
AW: TList als IntegerList
Ab Delphi 2009 könnte man es ja problemlos mit den Generics machen.
Delphi-Quellcode:
type TIntegerList = TList<Integer>;
|
AW: TList als IntegerList
Siehe #
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:21 Uhr. |
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