Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Variablenwerte beim Erstellen von Objekt (https://www.delphipraxis.net/178749-variablenwerte-beim-erstellen-von-objekt.html)

Popov 24. Jan 2014 23:27

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?

Sir Rufo 24. Jan 2014 23:43

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 ;)

Aphton 25. Jan 2014 00:03

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.

Furtbichler 25. Jan 2014 09:45

AW: Variablenwerte beim Erstellen von Objekt
 
Zitat:

Zitat von Sir Rufo (Beitrag 1245264)
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 ;)

Ich persönlich finde explizites Zuweisen von Initialisierungswerten (auch '0') sehr wichtig, denn es wird sonst implizit davon ausgegangen, das die Werte immer 0 sind. Und implizite Annahmen im Code sind -aus dokumentatorischer Sicht- zu vermeiden. Siehe auch die Diskussiondiesen Thread.

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.

himitsu 25. Jan 2014 14:14

AW: Variablenwerte beim Erstellen von Objekt
 
Globale Variablen, Thread-Variablen, Felder in Objektinstanzen und Delphi-Referenz durchsuchenNew sind per Default mit 0, bzw. nil initialisiert.

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 12:57 Uhr.

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