Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Freigeben von nicht mehr verwendeten Objekten!


Hagbard Celine - Do 12.09.02 08:50
Titel: Freigeben von nicht mehr verwendeten Objekten!
Ich habe mal wieder ein paar eigene Objekte zur Speicherung verschiedener Zwischenzustände geschrieben und dabei ist mir mal wieder eine Frage in den Kopf gekommen!

Ich kenne die Technik von Java her das Objekte auf die nicht mehr verwiesen wird automatisch nach einer Zeit gelöscht werden!

Wie läuft das bei Delphi??

Wenn ich davon ausgehe das ich in meinem Objekt eine TList habe der ich beliebige Objecte TTestObject zufüge.

Quelltext
1:
2:
3:
meinObject:TMeinObject;

meinObject.addObjects(Obj1,...,Objn);


Was ist wen ich jetzt MeinObject aufhebe, werden dann nach einer Zeit auch alle Objecte welche nur in meinem Object referenziert waren (Obj1...Objn) aufgehoben oder geschiet das sofort automatisch??

Ansonsten :

Wie hebe ich die optimal auf um mir nicht bei einer Anwendung die endlos läuft mehr und mehr den Speicher zuzumüllen!


LCS - Do 12.09.02 09:03

Hi
So nen GarbageCollector wünsche ich mir für Delphi auch manchmal. Grundsätzlich gilt die Regel: Was du selbst erzeugst, muss du auch selbst wieder freigeben.
Wenn du meinObject freigibst löst du zwar die Referenzen auf Obj1..Objn auf, aber die Objekte selbst existieren immer noch. Solange bis du sie freigibst.

Gruss Lothar


SvenAbeln - Do 12.09.02 09:18

Hallo,


du muß die Objekte selber mit

Quelltext
1:
Obj1.free;                    


freigeben.


Hagbard Celine - Do 12.09.02 09:20

LCS hat folgendes geschrieben:
Hi
So nen GarbageCollector wünsche ich mir für Delphi auch manchmal. Grundsätzlich gilt die Regel: Was du selbst erzeugst, muss du auch selbst wieder freigeben.
Wenn du meinObject freigibst löst du zwar die Referenzen auf Obj1..Objn auf, aber die Objekte selbst existieren immer noch. Solange bis du sie freigibst.

Gruss Lothar


Wenn ich eine Instanz von TObjectList freigebe werden alle Objekte auf welche die Liste verweist freigegeben,

gilt das auch für TList???

Kann ich die Methode Free überschreiben? Z.B. so :

Quelltext
1:
2:
3:
4:
5:
procedure TMeinObject.Free;
begin
  inherrited free;
  deleteAllObjects(Obj1..Objn);
  end;


Hagbard Celine - Do 12.09.02 09:21

SvenAbeln hat folgendes geschrieben:
Hallo,


du muß die Objekte selber mit

Quelltext
1:
Obj1.free;                    


freigeben.

Wusste wie es im einzellnen geht, meine Frage ziehlte mehr auf die Notwendigkeit ab!

Danke trotzdem!!!


Tino - Do 12.09.02 10:44

Hagbard Celine hat folgendes geschrieben:
Wenn ich eine Instanz von TObjectList freigebe werden alle Objekte auf welche die Liste verweist freigegeben

Aber nur wenn die Eigenschaft OwnsObjects auf True (Default-Wert) steht.

Hagbard Celine hat folgendes geschrieben:
gilt das auch für TList???

Nein.

Hagbard Celine hat folgendes geschrieben:
Kann ich die Methode Free überschreiben?

Die Frage habe ich mir noch nie gestellt da ich immer den Destructor überschreibe. Also so:

Quelltext
1:
2:
3:
4:
5:
destructor tMeinObject.Destroy;
begin
  DeleteAllObjects;
  Inherited;
end;

Gruß