2010-08-13 9 views
8

J'utilise un enregistrement composé de chaînes, de booléens, d'entiers, de devises et de tableaux d'autres enregistrements dans une méthode d'une classe. Je voudrais initialiser récursivement tous les champs d'un type primitif à vide/faux/zéro. Delphi ne semble pas faire cela par défaut. Existe-t-il un moyen simple d'accomplir ceci qui n'implique pas d'accéder à chaque champ par son nom et de le configurer manuellement?Comment initialiser un enregistrement déclaré en tant que variable locale?

+0

Notez que Delphi initialise les types gérés par la durée de vie (chaînes, tableaux dynamiques, interfaces). – kludg

+4

En Delphi-2009 et plus tard un enregistrement peut être initialisé par 'Foo: = Default (TFoo);'. Voir [la réponse de David] (http://stackoverflow.com/a/11066205/576719) à la question [Comment libérer correctement les enregistrements qui contiennent divers types dans Delphi à la fois?] (Http://stackoverflow.com/q/ 11065821/576719). –

+2

voir aussi: [Quelles variables sont initialisées en Delphi?] (Http://stackoverflow.com/questions/861045/which-variables-are-initialized-when-in-delphi) – Ampere

Répondre

10

Vous pouvez utiliser l'un des des constructions suivantes (où Foo est un enregistrement).

FillChar(Foo, SizeOf(Foo), 0); 

ZeroMemory(@Foo, SizeOf(Foo)); 

d'un poste de Allen Bauer

Tout en regardant les utilisations les plus courantes pour FillChar afin de déterminer si la plupart des gens utilisent FillChar pour effectivement remplir la mémoire de caractère données ou simplement utiliser pour initialiser mémoire avec une certaine valeur d'octet, nous trouvé que c'était le dernier cas que a dominé son utilisation plutôt que le précédent. Avec cela, nous avons décidé de garder FillChar byte-centric.

+4

Ou même code avec (probablement) mieux lisibilité: ZeroMemory (@Foo, SizeOf (Foo)); – Im0rtality

+0

@ Im0rtality: J'ai mis à jour la réponse pour inclure votre solution ZeroMemory. –

+0

Notez que ZeroMemory est un wrapper pour FillChar dans * certaines * versions de Delphi (d6 et 7 au moins). –

Questions connexes