Forum: Object-Pascal / Delphi-Language
Delphi
by sirius,
11. Sep 2008
Du hast also zwei Referenzen auf ein Objekt. Wie gesagt, die Referenzen musst du per Hand auf nil testen. Aber du solltest eher etwas in deiner Logik verändern. Es geht prinzipiell nicht so wie du möchtest.
Forum: Object-Pascal / Delphi-Language
Delphi
by sirius,
10. Sep 2008
Das ist nicht merkwürdig, das ist nur logisch und auch nicht anders machbar, siehe Post #6.
Forum: Object-Pascal / Delphi-Language
Delphi
by sirius,
10. Sep 2008
Du hast die Frage ja fast selber beantwortet.
Den As-Operator kann ich nur auf Objekte anwenden.
Alle Objekte sind von TObject abgeleitet.
Also haben alle Objekte die Methoden und Eigenschaften von TObject.
As TObject verkümmert immer zu einem simplen TypeCast.
Ein As Operator auf eine Vorfahrklasse ist nicht notwendig und wird daher auch vom Compiler ignoriert
As ist nur notwendig, wenn...
Forum: Object-Pascal / Delphi-Language
Delphi
by sirius,
10. Sep 2008
Ja, free löscht ja nicht die Referenzen auf das Objekt sondern nur das Objekt.
In Worldactor steht immer noch ein Pointer. Der zeigt zwar ins Nirvana (aber nicht nach nil) und zwar genau dorthin, wo früher mal ein Objekt war (ist wie, wenn in einer Landkarte Troja eingezeichnet ist). Aber das Objekt gibt es deswegen nicht.
Wenn du dieses Problem hast, dann musst du konsequent nach dem Aufruf...
Forum: Object-Pascal / Delphi-Language
Delphi
by sirius,
10. Sep 2008
Genau das sollte funktionieren. Dafür ist ja Veerbung und Polymorphie da.
btw: Die Methode free ist von TObject. Du kannst also auch auf TObject casten und free aufrufen.
Probier vielleicht mal das casten mit as:
(ListemitObjekten.Items as T3DObj).Free;
//oder
(ListemitObjekten.Items as TObject).Free;
Das könnte evtl. die Fehlersuche erleichtern.