Autor Beitrag
Hagbard Celine
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 119



BeitragVerfasst: Do 12.09.02 08:50 
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.
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1305
Erhaltene Danke: 1

WIN 7, WIN 8
Delphi XE5, Delphi XE, Delphi 2007
BeitragVerfasst: 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

_________________
Der BH ist für die Brust, der Plan ist für'n Ar...
SvenAbeln
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 334
Erhaltene Danke: 3



BeitragVerfasst: Do 12.09.02 09:18 
Hallo,


du muß die Objekte selber mit
ausblenden Quelltext
1:
Obj1.free;					


freigeben.
Hagbard Celine Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 119



BeitragVerfasst: 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 :
ausblenden Quelltext
1:
2:
3:
4:
5:
procedure TMeinObject.Free;
begin
  inherrited free;
  deleteAllObjects(Obj1..Objn);
  end;
Hagbard Celine Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 119



BeitragVerfasst: Do 12.09.02 09:21 
SvenAbeln hat folgendes geschrieben:
Hallo,


du muß die Objekte selber mit
ausblenden Quelltext
1:
Obj1.free;					


freigeben.

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

Danke trotzdem!!!
Tino
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: 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:
ausblenden Quelltext
1:
2:
3:
4:
5:
destructor tMeinObject.Destroy;
begin
  DeleteAllObjects;
  Inherited;
end;

Gruß