Forum: Object-Pascal / Delphi-Language
by jaenicke,
25. Aug 2021
Ja, schon, aber wozu die Pointer? Eine Objektreferenz ist doch per se schon ein Pointer. Ein Pointer auf einen Pointer macht an der Stelle keinen Sinn.
Ja, so wie ich es verlinkt habe. Smart Pointers ist das Stichwort. Die machen genau das, nur deutlich sinnvoller.
Forum: Object-Pascal / Delphi-Language
by jaenicke,
25. Aug 2021
Stimmt, da hast du Recht. Ich habe es nur laufen lassen und gar nicht genauer angeschaut. Die beiden Zeilen machen in der Reihenfolge natürlich keinen Sinn: intf := TMyInterfacedObject.Create( TObject(list) );
list := TStringList.Create;
Richtig wäre: list := TStringList.Create;
intf := TMyInterfacedObject.Create( TObject(list) );
Ach ja... hier gibt es übrigens eine bessere Lösung...
Forum: Object-Pascal / Delphi-Language
by jaenicke,
25. Aug 2021
Bei mir (aktuelle Community Edition) passiert kein Fehler.
Den Sinn der Pointer sehe ich aber auch nicht.
Forum: Object-Pascal / Delphi-Language
by jaenicke,
24. Aug 2021
Das wäre kein Bug, sondern ein logisches Problem. Erzeugt man eine Instanz über den Konstruktor, erzeugt man eine Objektinstanz. Der Referenzzähler wird erst bei der Übergabe in eine Interfacereferenz erhöht. Packt man die Objektreferenz aber gar nicht in eine Interfacereferenz, sondern übergibt die Instanz direkt an eine konstante Methode, wird der Referenzzähler nirgends erhöht. Denn die...
Forum: Object-Pascal / Delphi-Language
by jaenicke,
24. Aug 2021
Versuch es mal ganz normal mit der Zuweisung an Result...
function CreateInterfacdObject (var v0, v1): IMyInterfacedObject;
begin
Result := TMyInterfacedObject.Create(v0, v1);
end;
FastMM4 sollte dir auch die Stacktraces liefern. Damit kann man die Ursache meistens gut finden.