![]() |
Variablenwerte beim Erstellen von Objekt
Ich hab die ganze Zeit irgendwie im Kopf gehabt, dass bei einer Klasse, bzw. von Objekt, der Bereich beim Erstellen zuerst genullt wird, so dass alles Werte am Anfang den Wert Null haben.
Nun habe ich gestern bei studieren einer Unit von Delphi bei Create Null-Zuweisungen bemerkt, also z. B. Abc := 0; usw. Was ist jetzt also richtig, wird der Speicherbereich vorher genullt oder doch nicht? |
AW: Variablenwerte beim Erstellen von Objekt
Ja, man kann den Default-Wert der Variablen als gegeben annehmen.
Der Source von Delphi kann nicht immer als Referenz für guten Code herangezogen werden ;) |
AW: Variablenwerte beim Erstellen von Objekt
Das hängt damit zusammen, dass Klasseninstanzen auf dem Heap landen und somit automatisch mit 0 initialisiert sind/werden.
Temporäre statische Variablen hingegen landen im Stack, wo der Wert variabel ist.
Delphi-Quellcode:
procedure writeInternalVariable();
var x: Array[0..7] of Integer; begin Writeln(x[0]); // schreibt "1234" effektiv end; begin asm mov DWORD [esp-$24], 1234 end; writeInternalVariable; readln; end. |
AW: Variablenwerte beim Erstellen von Objekt
Zitat:
![]() Ich bin diesbezüglich mal (ist aber schon 57 Jahre (gefühlt) her) gestolpert. Dort hatte nämlich Win-95 keine Lust, einen Speicherbereich vorher zu nullen, was dann zu echt blöden Fehlern führte (WinNT, Win2000 = ok, Win95=nee). Aber das ist Vergangenheit. Grundsätzlich ist nichts gegen (redundante) Initialisierungen einzuwenden. Es juckt keine Sau (außer vielleicht bei performancekritischem Code), und erhöht die Lesbarkeit. Aber sicher: Nooootwendig ist es nicht. |
AW: Variablenwerte beim Erstellen von Objekt
Globale Variablen, Thread-Variablen, Felder in Objektinstanzen und
![]() Locale Variablen sind aber nicht initialisiert, abgesehn von gemanagten, also Strings, dynamischen Arrays und Interfaces, denn damit die automaitsche Speicherverwaltung funktioniert, muß dort ein definierter Grundzustand vorliegen. In aktuellen mobilen Compilern dürfte das auch Objektzeiger betreffen, welcher per ARC verwaltet werden. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:48 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