Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by himitsu,
11. Mär 2015
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
https://quality.embarcadero.com/browse/RSP-10100
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by himitsu,
26. Feb 2015
Jupp, kein Speicherleck ... zwei Variablen = zwei Referenzen :D
Das weiß man. :zwinker:
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...
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by himitsu,
26. Feb 2015
Es kann sein, daß der Compiler die Variable tmpBumsList direkt als Result für GetNewGuidList verwendet.
Nein, das ist bestimmt so.
Gemanagete Typen als Result werden in einen Var-Parameter umgewandelt.
Aus function GetNewGuidList: IGuidList; macht der Compiler ein procedure GetNewGuidList(var Result: IGuidList);.
Da das Feld nicht direkt übergeben werden kann (bzw. er zu doof dafür ist),...
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by himitsu,
26. Feb 2015
http://www.delphipraxis.net/184100-weak-tlist.html usw.
Jupp, fällt in den Bereich. :stupid:
Das hab ich mich auch schon gefragt. :wall:
Du kannst aber (theoretisch) das Interface neu einbinden und auf die neuen/eigenen Methoden verweisen.
Früher hatte ich einfach nur selber das IInterface implementiert, aber wenn du jetzt mal in TInterfacedObject nachsiehst, was dort gemacht wird ......
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by himitsu,
24. Feb 2015
"intensiv" ist gut, ich wollte eine gemeinsame Funktion (speicherverwaltung für sich gegenseitig referenzierende Interfacelisten) in einem generischen Interface+Klasse umsetzen, aber kurz vorm Ende, bin ich mal wieder an die Grenzen der Generics gestoßen. :wall:
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by himitsu,
24. Feb 2015
AS kann in den überwachten Ausdrücken nicht verwendet werden,
auch solltest du Seiteneffekte erlauben.
Entweder du baust dir ins Interface eine GetRefCount-Methode ein
oder du baust dir eine Funktion, welche das Interface als CONST entgegennimmt, RefCount zurückgibt und rufst diese Funktion in den Ausdrücken auf.
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by himitsu,
23. Feb 2015
Der Compiler könnte eine Temp-Variable erstellen und diese an den Parameter übergeben. :stupid:
Gut, daß macht der Compiler bestimmt, aber ich wette das ist eine Objekt-Variable, die hier ja nicht referenzgezählt sind.
Dann könnte es im ARC doch funktionieren, aber dann müssten wie auch noch prüfen, ob das bei allen Objekten, auch aus Objektvariablen, bei Übergabe an...
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by himitsu,
23. Feb 2015
Wir haben somit einen mindestens 20 Jahre alten "schweren" Fehler entdeckt. :firejump:
Mist, ich hätte noch eine Minute warten müssen, dann hätte ich die 10101 ergatterst. (jetzt muß ich noch einen Monat warten, bis zur 1010101 :stupid:)
https://quality.embarcadero.com/browse/RSP-10100
Wie sieht das beim ARC aus? Müsste ja eigentlich gleich sein.
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by himitsu,
23. Feb 2015
Das ist dann aber ein Bug?
Hier procedure foo( aFoo : IFoo ); muß die Referenzzählung hoch gehn
und hier procedure foo( const aFoo : IFoo ); natürlich nicht.
Innerhalb der letzten Methode hat man dann viel Spaß, sobald der Zähler das erste Mal wieder auf 0 fällt.
Und ohne referenzzählenden Zugriff, auf den Parameter, gibt es ein schönes Speicherleck.