Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by stahli,
28. Feb 2015
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...
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by stahli,
26. Feb 2015
Ok, danke, so tief war ich da noch nicht eingestiegen (verstehe das auch jetzt nur ansatzweise).
Das Problem RefCounter mal 1 mal 2 konnte ich jetzt etwas eingrenzen:
Von der Factory wird nur ein Objekt erzeugt und als Interface zurück gegeben.
Wenn ich das Ergebnis einer lokalen Interfacevariable zuweise ist RefCounter 1.
Die gleiche Zuweisung zu einem privaten Feld führt zu...
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by stahli,
26. Feb 2015
Ja, habe ich natürlich auch vor (hatte ich natürlich auch schon mal oberflächlich).
Aber egal, was dort passiert, das dürfte doch erst bei "inherited" abgearbeitet werden und nicht bei "begin"!?
Daher bin ich davon ausgegangen, dass der Linker da irgendwas tut, das man innerhalb der Klasse nicht wirklich erkennen kann.
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by stahli,
26. Feb 2015
Hmm, offenbar sind gegenseitige Referenzen mein Problem.
Ich habe ein MyIntf, das eine Eigenschaft IMyParentList unterstützt.
Das Interface weiß also, von welcher Liste es kontrolliert wird und kann diese über bestimmte Änderungen informieren.
Jetzt wird aber wohl die IMyParentList nicht freigegeben weil MyIntf nicht freigegeben wird und anders rum.
In der Richtung scheint das Problem zu...
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by stahli,
24. Feb 2015
generell:
Der Fehler ist ganz sicher als ein solcher zu bezeichnen.
Über das Problem wird wohl jeder stolpern, der Interfaces in Delphi benutzt. Ein logisches und zu erwartendes Verhalten ist das jedenfalls nicht.
Es ist für mich nicht nachvollziehbar, dass Emba das nicht in Ordnung bringt (ggf. mit einem Projektschalter: InterfaceMemoryLeakProblemBeibehalten = True).
mein Problem:
...
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by stahli,
23. Feb 2015
@Sir
Ich hatte vorhin keinen roten Kasten...
Heißt das, wenn ich Interface-Parameter in einer Methode nicht benutzt wird gibt es ein MemoryLeak?
Das wäre ja eine sehr unschöne Sache.
Nach meiner derzeitigen Einschätzung dürfte das aber nicht das vorliegende Problem sein, da ich das Speicherleck vermeiden kann, indem ich die Anseisung List.Add(aInterface) auskommentiere.
Mir fällt...
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by stahli,
23. Feb 2015
Es gibt im Projekt einige Querverbindungen.
Aber wenn ich das List.Add mal rausnehme passt offenbar alles.
Ich werde das heute Abend mal weiter untersuchen. Gestern bin ich daran etwas verzeifelt.
Hätte ja sein können, dass da ein Bug bekannt wäre oder ich einen generellen Denkfehler hätte.
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by stahli,
23. Feb 2015
Hi,
ich bin noch nicht dazu gekommen, genauer nachzugraben - aber vielleicht ist das Problem ja auch direkt bekannt?
Ich arbeite mit XE3 an einem Projekt, das intensiv Interfaces benutzt. Jetzt zeigt mir EurekaLog ein Speicherleck.
Ich konnte das soweit eingrenzen, dass es wohl an einer generischen Liste liegen muss:
List := TList<IMyInterface>.Create;
List.Add(aInterface);
List.Free;