Hallo,
hier mal wieder ein typische Anfänger Frage.
Räumt SetLength(A,0) auch Objekte auf?
Beispiel:
var A: array of TObject;
begin
SetLength(A, 1);
A[0].Create();
...
SetLength(A, 0);
end.
Wird A[0].Free beim "entfernen" des dynamischen Arrays automatisch aufgerufen?
Ich vermute ja, ich muss das selber tun, bevor ich SetLength(A, 0) aufrufe.
Räumt SetLength(A,0) auch Objekte auf?
Re: Räumt SetLength(A,0) auch Objekte auf?
Du vermutest richtig. Die Objekte könnten ja auch anderswo noch gebraucht werden.Uli hat geschrieben:Ich vermute ja, ich muss das selber tun, bevor ich SetLength(A, 0) aufrufe.
Besser eignet sich TObjectList
http://www.freepascal.org/docs-html/fcl ... tlist.html" onclick="window.open(this.href);return false;
Wenn du OwnsObjects auf true setzt, werden diese "gefreed".
Ich verstehe sowieso nicht, wieso sich v.a. Neulinge immer mit Arrays abmühen. Es gibt doch wunderbare Klassen, die das alles fehlerunanfällig erledigen.
-
- Beiträge: 3444
- Registriert: Mo 11. Sep 2006, 10:24
- OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
- CPU-Target: X32 / X64 / ARMv5
- Wohnort: Krefeld
Re: Räumt SetLength(A,0) auch Objekte auf?
Automatisches free für gespeicherte Instanzen gibt es nur bei bei TObjectList, wenn die entsprechende Option gesetzt ist.
-Michael
-Michael
Re: Räumt SetLength(A,0) auch Objekte auf?
Danke für Eure Antworten.
Ich stamme noch aus dem Zeitalter, wo bei 64K Speicher Schluss war und man verkettete Listen noch selber mit Pointern realisieren musste. Vielleicht wird es Zeit, dass ich mal langsam im 21 Jahrhundert ankomme und mehr Klassen nutze.
Ich stamme noch aus dem Zeitalter, wo bei 64K Speicher Schluss war und man verkettete Listen noch selber mit Pointern realisieren musste. Vielleicht wird es Zeit, dass ich mal langsam im 21 Jahrhundert ankomme und mehr Klassen nutze.
-
- Beiträge: 1102
- Registriert: Di 5. Aug 2008, 09:37
- OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
- CPU-Target: 32/64,PPC(+64), ARM
- Wohnort: Eindhoven (Niederlande)
Re: Räumt SetLength(A,0) auch Objekte auf?
Und sich durch 26 Ebenen von Notifier wursteln, und noch immer nicht skalieren. IMHO sind die Container Klassen einer die Schwachpunkte von Delphi/Lazarustheo hat geschrieben:Du vermutest richtig. Die Objekte könnten ja auch anderswo noch gebraucht werden.Uli hat geschrieben:Ich vermute ja, ich muss das selber tun, bevor ich SetLength(A, 0) aufrufe.
Besser eignet sich TObjectList
http://www.freepascal.org/docs-html/fcl ... tlist.html" onclick="window.open(this.href);return false;
Wenn du OwnsObjects auf true setzt, werden diese "gefreed".
Ich verstehe sowieso nicht, wieso sich v.a. Neulinge immer mit Arrays abmühen. Es gibt doch wunderbare Klassen, die das alles fehlerunanfällig erledigen.
Re: Räumt SetLength(A,0) auch Objekte auf?
@marcov: Du kommst immer mit so pingeligen Performance Argumenten wenn man Neulinge auf den richtigen Pfad bringen will. 
Natürlich hast du im Prinzip recht, aber oft spielt das doch gar keine Rolle. Assembler wäre natürlich noch besser.

Natürlich hast du im Prinzip recht, aber oft spielt das doch gar keine Rolle. Assembler wäre natürlich noch besser.
