![]() |
AW: MemoryLeak bei TList<IMyInterface>
@himi
Einen IchVerneigeMichVorDir-Smily hat die DP ja nicht - hilfsweise dann so: :kiss: Das klingt einleuchtend und plausibel. Aber wie bekommt man das raus? @Stevie Das MemoryLeak ist woanders verursacht. Mein 1:2-Problem ergab sich als Fragestellung zwischendurch bei der Fehlersuche, ist aber nicht Fehlerverursachend. |
AW: MemoryLeak bei TList<IMyInterface>
Jupp, kein Speicherleck ... zwei Variablen = zwei Referenzen :D
Zitat:
Oder man versucht rauszubekommen was man im Assembler sieht. Aber so ist es die einzige sichere Möglichkeit, den Speicher/Referenzen auch bei Exceptions konsistent zu halten, also indem man den Speicher außenrum absichert. Die Result-Variable wird ja bei Exceptions einfach "ignoriert" und nicht weiter behandelt. |
AW: MemoryLeak bei TList<IMyInterface>
Jetzt wieder zum eigentlichen Thema: gegenseitige Referenzierung IListe <-> IEintrag ...
Ein klassischer Lösungsansatz geht offenbar über TAggregatedObject. Das Pointergeschiebe ist mir aber irgendwie suspekt (genauer gesagt verstehe ich das nicht ausreichend und erscheint mir das recht unsicher). Mir erscheint es für meinen Anwendungsfall sinnvoller, auf die automatische Referenzzählung zu verzichten. Diese finde ich (wenn es um Datenklassen geht) auch etwas fragwürdig. Ein abstraktes Beispiel: Ich habe ein Spiel mit einer Straße und einem Gullydeckel. Der Gullydeckel wird gesprengt (FreeAndNil bzw. :=nil). Wenn jetzt irgendeine Variable noch eine Instanz darauf hält, existiert der Deckel noch und die Figur kann weiter darüber laufen - tatsächlich müsste sie aber in das Loch fallen oder ein Fehler auftreten. Da ich meine Objekte ohnehin alle selbst verwalte und dies innerhalb meines geschlossenen Projektes, kann ich mir auch die Kontrolle über meine Objekte vorbehalten. Implementation von klassenübergreifenden Funktionalitäten (als eigentlichen großen Vorteil von Interfaces) kann ich ja weiter über Interfaces realisieren. So sollten auch gegenseitigen Referenzierungen kein Problem mehr darstellen (wenn ich das intern ordentlich verwalte - dafür gibt es ja wieder verschiedene Ansätze). Will da jemand Veto einlegen? Falls jemand zu dem Thema nachlesen will, hier mal meine gefundenen Links: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
AW: MemoryLeak bei TList<IMyInterface>
Wie immer heißt es hier: kommt drauf an
Ich unterscheide schon seit einiger Zeit Klassen in Daten- und Serviceklassen. Siehe dazu ![]() Das ist, wie er dort erläutert, auch bei DI wichtig. Und aus diesem Grunde vermeide ich es auch, in den Datenobjekten zu viel Logik unterzubringen, die möglicherweise Abhängigkeiten auf Services nach sich ziehen. |
AW: MemoryLeak bei TList<IMyInterface>
Wenn ich mir die fremden Umbauten an meinem Beispielcode anseh, dann macht dort jemand scheinbar Unittests.
Kann also nicht mehr lange dauern, bis zur Problemlösung. :-D ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:07 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz