Unterschied zwischen Initialize (), Default () und FillChar ()

8

Nehmen wir an, Sie haben einen lokalen Datensatz, den Sie initialisieren möchten:

%Vor%

Neben der manuellen Einstellung jedes Felds gibt es mehrere Möglichkeiten.

  1. Verwenden Sie Initialisieren ():

    %Vor%
  2. Verwenden Sie Standard ():

    %Vor%
  3. Verwenden Sie FillChar :

    %Vor%
  4. Definieren Sie eine leere Konstante und weisen Sie diese der Variablen

    zu %Vor%

All dies scheint in Situationen wie diesem Beispiel zu funktionieren. Ich denke, Sie könnten sogar eine globale Variable definieren, um sie zu initialisieren.

Aber gibt es eine bevorzugte Methode? Oder gibt es bestimmte Situationen, in denen es nicht empfohlen wird, die oben genannten zu verwenden, oder wo es einfach nicht funktioniert?

Kurz gesagt, was ist der definitive richtige Weg tm , um eine lokale Stack-Variable zu initialisieren? : -)

    
Wouter van Nifterick 05.01.2013, 20:40
quelle

1 Antwort

8

Verwenden Sie niemals Initialize für lokale Variablen.

  

Initialize sollte nur in Delphi-Code verwendet werden, in dem eine Variable auf andere Weise als die neue Standardprozedur dynamisch zugewiesen wird.

Außerdem würde es mit Ihrem Datensatz für einen NOP optimiert werden, da es keine verwalteten Typen enthält. Also können wir diese Option wegwerfen und das Feld auf drei Konkurrenten reduzieren.

Die restlichen drei Kandidaten haben alle denselben Effekt für eine nicht initialisierte lokale Variable. Es ist jedoch riskant, FillChar für eine lokale Variable mit verwalteten Mitgliedern zu verwenden, z. Strings, Schnittstellenreferenzen, Varianten usw. Wenn die verwalteten Mitglieder initialisiert wurden, brechen Sie den Referenzzählmechanismus auf. Wenn Sie jedoch sicher sind, dass der Datensatz nicht initialisiert wurde, ist FillChar sicher und effizient, wenn auch aus meiner Sicht eher hässlich. Persönlich würde ich FillChar für diese Rolle ablehnen.

Damit bleibt Default(T) und die konstante Zuweisung. In älteren Versionen von Delphi können Sie nur die konstante Zuweisung verwenden. Es ist fair zu sagen, dass die konstante Zuweisung so hässlich ist wie FillChar , bis Sie die Konstante deklariert haben. In modernen Delphi-Versionen würde ich mich für Default() entscheiden, da es meiner Meinung nach prägnanter ist und besser liest.

Wie war In einer ähnlichen Frage diskutiert, erzeugt der Compiler sehr effizienten Code, wenn Sie Default(T) einer Variablen zuweisen.

    
David Heffernan 05.01.2013, 21:11
quelle

Tags und Links