Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - TInterfacedObject-Nachfahren explizit freigeben
Udontknow - Do 10.10.02 15:30
Titel: TInterfacedObject-Nachfahren explizit freigeben
Hallo!
Ich möchte meinen in traditionellem OOP geschriebenen Code automatisierbar machen, deshalb bastele ich gerade daran, alle meine Objekte von o.g. Klasse abzuleiten, um den Zugriff per COM zu ermöglichen.
Dabei ergibt sich dann jedoch folgendes Problem:
Gebe ich das Objekt mit free frei, bekomme ich Zugriffschutzverletzungen; solche Objekte werden eigentlich automatisch von dieser Garbage-Collection freigegeben, sobald keine Schnittstellen-Referenzen zu diesem Objekt mehr existieren.
Eine automatische Freigabe wird aber bei meiner Objektstruktur nie erfolgen, weil ich die einzelnen Objekte sich untereinander referenzieren lasse (z.B. über eine Eigenschaft Owner).
Wie löse ich also dieses Problem? Hat jemand eine Lösung?
Cu, :D
Udontknow
CenBells - Do 10.10.02 18:39
Hallo, wie wäre es, wenn du die referenz auf dein objekt einfach dann mit nil belegst?
Gruß
Ken
Udontknow - Do 10.10.02 21:04
hi!
Danke für die Antwort, aber genau das klappt eben nicht.
Folgendes: Ich erstelle mein Objekt so:
Quelltext
1: 2: 3: 4:
| var InterfaceZuMeinemObjekt:IMeinInterface; begin InterfaceZuMeinemObjekt:=TMeineKlasse.Create; end; |
Jedes andere Objekt mit einer Schnittstelle würde sich nun durch den Aufruf von
Quelltext
1:
| InterfaceZuMeinemObjekt:=NIL; |
von der GarbageCollection erfasst und freigegeben, richtig? Nicht aber mein Objekt, denn dieses hat in sich auch wieder einen TInterfacedObject-Nachfahren, der über die Eigenschaft FOwner eben eine Referenz auf das Objekt hält.
Oder meinst du, das ich dann in jedem untergeordneten Objekt erst FOwner auf NIL schalten muss? Uff, das ist aber aufwendig... :shock:
Gibt es denn keine Möglichkeit, die Lebenszeit meiner Objekte unabhängig von dieser Referenzzählung zu handhaben? Mir ist gar nicht wohl bei dem Gedanken, daß das ganze Konstrukt bestehen bleibt, nur weil irgendwo irgendein kleiner Pointer noch nicht auf NIL gesetzt wurde...
Cu,
Udontknow
CenBells - Sa 12.10.02 17:47
die referenzzählung ist aber für interfaces lebenswichtig.
also kannst du das nicht umgehen.
Das Objekt, welches ein interface referenziert wird ja auch erst frei gegeben, wenn der zähler refcount = 0 ist
viel erfolg noch
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!