Eigentlich dachte ich ja, das bei reiner Interface-Verwendung keine Probleme mehr auftreten, aber irgendwie schaffe ich es durch meine Querverlinkung die Referenzzählung durcheinander zu bringen (siehe uImpl.pas Zeile 170)...
Mir ist nicht ganz klar, worauf das Testprogramm abzielt, aber im Anhang findest du eine Version ohne Speicherleck.
Man kann sich die TObjectList<T> und die Item-Klasse komplett sparen, aber ich merke du hast mein Beispiel mit dem Dictionary weiter oben auch nicht wirklich näher ausprobiert und/oder verstanden.
Ansonsten merkt man am Quelltext, dass du häufig viel zu kompliziert denkst und durch die Brust-ins-Auge-Lösungen bevorzugst.
Habe ich mir angesehen, aber die Welt ist halt nicht immer so einfach wie man es sich gerne machen würde. Die Hauptliste enthält bereits einen Hash und ist danach sortiert (um effizient darauf zugreifen zu können), alle anderen Listen benötigen keinen Namen und keinen Hash sie werden beim Parsen korrekt zusammengestellt und niemals durchsucht.
Das Beispiel ist soweit reduziert, dass nur noch das wesentliche (die gegenseitige Verlinkung) zu sehen ist.
Falls Du Dir die Implementierung von TDictionary mal angesehen hast, ist das ein dynamisches Array aus Records mit HashCode, Key und Value also genau was TListData auch enthält. Wo also die Liste verwaltet wird spielt meines Erachtens nach nur eine untergeordnete Rolle. Der einzige Unterschied liegt eventuell in der etwas lahmen Suche von TDictionary...
Wenn du schon die Zitatfunktion bemühst:
Zitat von
Whookie:
Das ist mir klar, ich programmier schon ein paar Tage länger mit Delphi
Interfaces werden seit Delphi 4 unterstützt, das sind auch schon ein paar Tage länger.
Hätte man sich auch mal zwischenzeitlich mit beschäftigen können...
dann versuch das mal so, dass es nicht sinnentstellend wird:
Sehe ich das richtig, ...
Wie oben erwähnt,...
Das ist mir klar, ich programmier schon ein paar Tage länger mit Delphi
Ich ...
Aber ich gebe zu, soviele Einrückungen können schon ganz schön verwirrend sein