Ich bin neu in Delphi, und ich habe einige Tests wurde ausgeführt, um zu sehen, welche Objektvariablen und Stack-Variablen standardmäßig initialisiert werden:Sind Delphi-Variablen standardmäßig mit einem Wert initialisiert?
TInstanceVariables = class
fBoolean: boolean; // always starts off as false
fInteger: integer; // always starts off as zero
fObject: TObject; // always starts off as nil
end;
Dies ist das Verhalten, das ich aus anderen Sprachen gewohnt bin Aber ich frage mich, ob man sich in Delphi darauf verlassen kann. Ich frage mich zum Beispiel, ob es von einer Compiler-Einstellung abhängen könnte oder vielleicht auf verschiedenen Rechnern anders funktioniert. Ist es normal, sich auf voreingestellte initialisierte Werte für Objekte zu verlassen, oder setzen Sie explizit alle Instanzvariablen im Konstruktor? Wie für Stapelvariablen (Prozedurebenen) zeigen meine Tests, dass unitialisierte Boolesche Werte wahr sind, unitäre Ganzzahlen sind 2129993264 und nicht initialisierte Objekte sind nur ungültige Zeiger (d. H. Nicht NULL). Ich schätze, die Norm ist, immer Variablen auf Prozedurenebene zu setzen, bevor Sie darauf zugreifen.
Zwei Anmerkungen: 1. Aufzeichnungen initialisiert werden nicht können globale Variablen direkt ihnen bei der Deklaration initialisiert werden. 2. Referenzzählungsvariablen werden immer initialisiert. !ABER! In einer Funktion, die eine Zeichenfolge zurückgibt, wird "Result" nicht wie erwartet mit einer leeren Zeichenfolge initialisiert. Dies liegt daran, dass 'Ergebnis' keine lokale Variable ist. Also immer: Ergebnis: = ''; – Ampere
siehe auch: [Welche Variablen werden in Delphi initialisiert?] (Http://stackoverflow.com/questions/861045/which-variables-are-initialized-when-in-delphi) – Ampere