AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Variablenwerte beim Erstellen von Objekt
Thema durchsuchen
Ansicht
Themen-Optionen

Variablenwerte beim Erstellen von Objekt

Ein Thema von Popov · begonnen am 25. Jan 2014 · letzter Beitrag vom 25. Jan 2014
Antwort Antwort
Popov
(Gast)

n/a Beiträge
 
#1

Variablenwerte beim Erstellen von Objekt

  Alt 25. Jan 2014, 00:27
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?
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Variablenwerte beim Erstellen von Objekt

  Alt 25. Jan 2014, 00:43
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
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#3

AW: Variablenwerte beim Erstellen von Objekt

  Alt 25. Jan 2014, 01:03
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.
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#4

AW: Variablenwerte beim Erstellen von Objekt

  Alt 25. Jan 2014, 10:45
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.

Geändert von Furtbichler (25. Jan 2014 um 15:07 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.062 Beiträge
 
Delphi 12 Athens
 
#5

AW: Variablenwerte beim Erstellen von Objekt

  Alt 25. Jan 2014, 15:14
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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:31 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