AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Richtig/sauber freigeben - nur wie?

Ein Thema von LDericher · begonnen am 7. Okt 2009 · letzter Beitrag vom 7. Okt 2009
Antwort Antwort
Seite 2 von 2     12
Benutzerbild von LDericher
LDericher

Registriert seit: 29. Jan 2007
Ort: Erkelenz
224 Beiträge
 
Delphi 7 Enterprise
 
#11

Re: Richtig/sauber freigeben - nur wie?

  Alt 7. Okt 2009, 15:00
Zitat von himitsu:
Strings (abgesehn vom ShortString), dynamische Arrays, Objekte und Interfaces sind dagegen im Record "nur" Zeiger auf die entsprechenden Daten.
Und das heißt jetzt für mich?
"Clicking this button you agree with our Verantwortungsverzicht und Abkommen."
Zitat von Ein unentschlossener Programmierer:
Enabled:=true or false or true or false or true or false;
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#12

Re: Richtig/sauber freigeben - nur wie?

  Alt 7. Okt 2009, 15:06
Zitat von LDericher:
Zitat von himitsu:
Strings (abgesehn vom ShortString), dynamische Arrays, Objekte und Interfaces sind dagegen im Record "nur" Zeiger auf die entsprechenden Daten.
Und das heißt jetzt für mich?
Verwirrung pur

Nix, außer dass du dich bei Variablen, welche nicht Objekte oder Pointer sind, auch niemals um die Freigabe kümmern musst. Da dies für dein Record zutrifft, brauchst du auch nichts löschen. Das wird automatisch erledigt.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.014 Beiträge
 
Delphi 12 Athens
 
#13

Re: Richtig/sauber freigeben - nur wie?

  Alt 7. Okt 2009, 15:19
Zitat von sirius:
Verwirrung pur
...
praktisch, wie sirius in Kurz grad sagte

Daß es nun darauf ankommt, ob es für diese Daten eine entsprechende Automatik gibt.

Strings und dynamische Arrays werden von der CompilerMagic behandelt.
bei Interfaces ist es ähnlich

Auch wenn du Records via New/Dispose erstellst/löschst
oder selber Speicher z.B. via GetMem/FreeMem/Initialize/Finalize verwaltets
greift die CompilerMagic ein.

Diese CompilerMagic behandelt auch alle Variablen, welche in Funktions-Parametern, als lokale/globale Variablen, in Arrays oder als Class-/Instanzvariablen in Objekten drin stecken

Dann gibt es eben noch Objekte, welche beim Dispose/Free eine in ihnen angelegte Liste selber bereinigen.


So, nun Interger, Sets, Enums, Chars ... liegen halt direkt im Record und da sie keinen eigenen Speicher besitzen werden sie praktisch mit dem Record entfernt/erstellt.

Alles was jetzt außerhalb des Records liegt und im Record nur einen Zeiger hat
muß nun irgendwie extra behandelt (gelöscht) werden.

Da nun das Array ja von der CompilerMagic freigegeben wird, kümmert sich diese auch im die enthaltenen Records und gibt auch dort "alles" frei, welches ebenso von ihr behandelt wird.

- Integer/Enum/Set/ShortString ligt mit drin und braucht nicht extra behandelt zu werden
- bei den String, DynArray und Interface macht dieses halt die CompilerMagic, wenn der Record-Speicher Ordnunggemäß freigegeben wird (man kann es aber auch selber machen)
- bei Objekten mußt du es mit .Free selber machen (es sei den, das Objekt liegt in einem anderen Objekt, welches seine Liste selber bereinigt)
- bei allen anderen Pointern mußt du es eh selber machen
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von LDericher
LDericher

Registriert seit: 29. Jan 2007
Ort: Erkelenz
224 Beiträge
 
Delphi 7 Enterprise
 
#14

Re: Richtig/sauber freigeben - nur wie?

  Alt 7. Okt 2009, 15:29
Alles klar, ich denke, jetzt hab ichs soweit verstanden

Und was ist mit Pointern wie zB von ScanLine welche kommen? das sind doch eigentlich nur integerwerte, die auf einen Speicherbereich (zB Bitmap) zeigen, der separat freigegeben wird (hier mit dem Objekt vom Typ TBitmap), oder?
"Clicking this button you agree with our Verantwortungsverzicht und Abkommen."
Zitat von Ein unentschlossener Programmierer:
Enabled:=true or false or true or false or true or false;
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.014 Beiträge
 
Delphi 12 Athens
 
#15

Re: Richtig/sauber freigeben - nur wie?

  Alt 7. Okt 2009, 15:35
bei ScanLine holst du dir sozusagen nur eine Kopie eines Zeigers auf den Speicher ... der verwiesene Speicher wird aber vom TBitmap verwaltet und auch freigegeben.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#16

Re: Richtig/sauber freigeben - nur wie?

  Alt 7. Okt 2009, 16:10
Zitat von sirius:
Zitat von Muetze1:
Eine weitere Ausnahme: Komponenten. Der im Konstruktor übergebne Owner kümmert sich bei seiner Freigabe um die ihm zugeteilten Komponenten.
Komponenten sind aber wieder die ausnahme in der ausnahme :mrgreen: Denn hier kannst du frei eintscheiden, ob du sie selber freigeben willst oder ob es der owner machen soll. Bei einer TObjectlist darfst du das Objekt nicht freigeben wenn du Ownsobjects auf true hast. (Naja, dürfte hier auch soweit allen klar sein, ist nur für Anfänger recht schwer zu durchschauen)
Nein, die Ausnahme der Ausnahme ist die Methode Extract() der TObjectList.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:14 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz