Question

J'ai une collection dérivée de tcollection, implémentant Genenumerator afin que je puisse l'utiliser dans une construction comme

for lElem in lCollection do

L'énumérateur est dérivé de Tobject, exactement comme les énumérateurs standard fournis par Delphi et n'a pas de propriétaire.

L'aide Delphi mentionne que si l'énumérateur prend en charge iDisposable, il sera éliminé, mais c'est pour .NET seulement bien sûr.

Ce que je me demandais, c'est comment et quand et par qui l'instance de l'énumérateur est libérée?

Était-ce utile?

La solution

Pour chaque compilateur d'instruction FOR-ENUM génère du code qui correspond à peu près à ce pseudocode:

enumerator := list.GetEnumerator;
try
  while enumerator.MoveNext do
    do something with enumerator.Current;
finally
  enumerator.Free;
end;

Le code ci-dessus est généré pour les énumérateurs qui sont implémentés sous forme d'instances de classe. Si votre énumérateur est implémenté en tant qu'interface, la dernière ligne n'appellerait pas le nombre de références à l'interface libre mais simplement décrément permettant de la détruire.

Autres conseils

Il est libéré automatiquement une fois qu'il n'est plus nécessaire. Le compilateur génère du code pour ce faire pour que vous n'ayez pas besoin. Lorsque l'élimination se produit est un détail de mise en œuvre.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top