Types löschen

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

ToeB

Betreff: Types löschen

BeitragMi, Sep 01, 2010 19:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Also mal ne Frage, ich hab folgendes :

BlitzMax: [AUSKLAPPEN]
Type TType
Global List:TList = CreateList()

Field link:TLink

Method New()
link = List.AddLast( Self )
End Method

Method Remove()
link.Remove()
End Method
End Type


Wenn ich jetzt TType.Remove() schreibe, ist dann wirklich der ganze Type eintrag gelöscht oder nur der Link in der Liste ?

mfg ToeB
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

Xeres

Moderator

BeitragMi, Sep 01, 2010 19:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn das Objekt noch irgendwo referenziert wird, wird es nicht gelöscht. Ansonsten: Ja, sobald der GC bemerkt, dass auf das Objekt nicht mehr zugegriffen werden kann, wird der Speicher frei gegeben.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

ToeB

BeitragMi, Sep 01, 2010 20:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Was heißt referenziert ? HAb ich noch nie gehört xD

mfg ToeB
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

Xeres

Moderator

BeitragMi, Sep 01, 2010 20:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Der GC zählt einfach, in wie vielen Variablen das Objekt abgelegt ist - Objekte werden in BlitzMax ja nicht kopiert, die Variablen zeigen auf den Speicher, in dem das richtige Objekt liegt (-> Referenz). Wenn du jetzt jede Variable Nullst, bzw. aus jeder Liste aus trägst, kann das Objekt nicht mehr erreicht werden und dann wird der Speicher wieder frei gemacht.
Also: Prinzipiell ja, funktioniert so.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

mpmxyz

BeitragMi, Sep 01, 2010 20:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Etwas ist referenziert = Man kann über eine Variable auf das Objekt dieses zugreifen. (Die Variable ist eigentlich nur eine Referenz auf das Objekt!)
mfG
mpmxyz
Edit: 600 Beiträge! \o/
Edit2: Lass mir doch ein bisschen Freude! Razz
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer
  • Zuletzt bearbeitet von mpmxyz am Mi, Sep 01, 2010 20:39, insgesamt 2-mal bearbeitet

d-bug

BeitragMi, Sep 01, 2010 20:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Sagen wir mal, du machst:
BlitzMax: [AUSKLAPPEN]
Global deineVariable:TDeinType = New TDeinType


Dann referenzierst du eine Instanz von TDeinType auf die globale Variable "deineVariable".
Wenn du diese Referenz nicht mit Null überschreibst, dann kann der GC keinesfalls wissen, dass
du die Instanz gelöscht haben möchtest.

Also, zuzüglich zu deiner Methode:
BlitzMax: [AUSKLAPPEN]
Global deineVariable:TDeinType = New TDeinType
'ab jetzt wird geloescht:
deineVariable.Remove()
deineVariable = Null


Dann wird nach einiger Zeit der Speicher, den deine Instanz belegte vom GC wieder frei gegeben.

@mxzyZungebrech: 1753 \o/ bekomme ich nun einen Preis?

ToeB

BeitragMi, Sep 01, 2010 20:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Okay super danke Wink

mfg ToeB

@Edit : Ich mach auch mal mit xD : 1928 \o/ Very Happy

Btw. Noch ein Edit : Das gilt doch nur für "Globale" zeiger bzw. Variablen oder ? also wenn ich irgentwo in einer Funktion schreibe :
Code: [AUSKLAPPEN]
Local tmp:TObject = New TObject

Und dann Remove() mache ist es doch gelöscht oder nicht ?
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

FireballFlame

BeitragMi, Sep 01, 2010 22:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Kommt drauf an, wie groß deine Funktion ist.

Wenn die Funktion zuende gelaufen ist, gibts die Variable nicht mehr. Das läuft auf das selbe hinaus wie "tmp = Null".
Aber erst wenn eins von beidem passiert ist, wird das Objekt gelöscht.
PC: Intel Core i7 @ 4x2.93GHz | 6 GB RAM | Nvidia GeForce GT 440 | Desktop 2x1280x1024px | Windows 7 Professional 64bit
Laptop: Intel Core i7 @ 4x2.00GHz | 8 GB RAM | Nvidia GeForce GT 540M | Desktop 1366x768px | Windows 7 Home Premium 64bit

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group