Einzelnen Beitrag anzeigen

Der schöne Günther

Registriert seit: 6. Mär 2013
6.155 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

Wer und was ruft alles TList.Pack() auf (und warum?)

  Alt 27. Mai 2013, 17:00
Delphi-Version: XE2
Elementares Verhalten einer elementaren Klasse. Und ich finde nichts konkretes.

Folgendes: Ich dachte, ich sei schlau und füge einer TObjectList ab und an auch mal ein eine Nullreferenz hinzu: Add(nil) . Das Anfügen scheint allerdings immer einen Pack() -Befehl auszuführen: Die Nullzeiger werden hier wohl herausgeworfen. Dabei waren doch gerade die Teil meiner ausgefuchsten Überlegungen!

Das DocWiki spricht zu Pack() :
Zitat:
Löscht alle nil- (Delphi) oder NULL- (C++) Elemente aus dem Array Items.

Mit Pack werden innerhalb des Arrays Items alle Elemente, die keine nil- (Delphi) bzw. keine NULL- (C++) Zeiger sind, nach vorne gebracht. Dabei wird der Wert der Eigenschaft Count auf die Zahl der Elemente verringert, die tatsächlich verwendet werden. Die Methode Pack gibt allerdings den für die nil- (Delphi) bzw. NULL- (C++) Zeiger verwendeten Speicher nicht frei. Hierzu muss die Eigenschaft Capacity auf den neuen Wert von Count gesetzt werden.
In der Hilfe vermisse ich zu Add() jetzt den Hinweis, dass Pack() überhaupt aufgerufen wird. Insgesamt auch, welche Methoden noch auf ein Pack() zurückgreifen. Und ob ich das vielleicht auch abstellen kann.

Doch Ihr werdet mir sicher weiterhelfen können.
  Mit Zitat antworten Zitat