Method Delete() funktioniert nicht mehr?

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

Artemis

Betreff: Method Delete() funktioniert nicht mehr?

BeitragSo, Jan 04, 2009 22:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Sorry Jungs, hab ich was verpasst, oder warum funktioniert folgender Code nicht mehr wie gewünscht (aktuelles SVN-BlitzMax):
Code: [AUSKLAPPEN]
SuperStrict

Type test
   Method New()
      Print "new"
   EndMethod
   Method Delete()
      Print "delete"
   EndMethod
EndType

Local t:test = New test
t = Null

Eigentlich sollte die Methode Delete doch am Ende aufgerufen werden, wird sie aber nicht.
 

ChristianK

BeitragSo, Jan 04, 2009 22:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Du musst danach noch den Garbage Collector mit GCCollect aufrufen.
AdvanceLcd
Intel Core 2 Duo 3.2 GHz, 4 GB RAM, GeForce 8800 GTX | MacBook Pro 15,4″ Intel Core 2 Duo 2.4 GHz, 2 GB RAM, GeForce 8600M GT

Artemis

BeitragSo, Jan 04, 2009 22:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Alles klar, aber warum ruft Blitz nicht am beim Beenden den GC selber noch einmal auf?

So ist es also am besten, wenn ich am Anfang OnEnd(GCCollect) aufrufe.

Suco-X

Betreff: ....

BeitragSo, Jan 04, 2009 23:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Habe immer gedacht der ganze Datenmüll eines Programms wird nach dem beenden sowieso automatisch vom Betriebssystem entfernt, wieso also die Mühe machen und zweimal kehren?
Mfg Suco
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB

Artemis

BeitragMo, Jan 05, 2009 11:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe eine externe Bibliothek in C, welche ich in BlitzMax wrappe.

Jetzt sieht meine Klasse quasi so aus: Der Pointer zeigt auf das C struct.

Code: [AUSKLAPPEN]
Type TITDB
   
   Field pointer:Byte Ptr
   
   Method Delete()
      If Self.pointer Then
         bmx_itdb_free(Self.pointer)
         Self.pointer = Null
      EndIf
   EndMethod
EndType


Das mache ich, damit man sich nicht selber um das "freen" der externen Ressourcen kümmern muss, sondern das Verhalten dem BlitzMax-Verhalten entspricht.

Wenn das jetzt aber nicht aufgerufen wird, kann es sein, dass in der externen Bibliothek nicht alles sauber beendet wird.

BtbN

BeitragMo, Jan 05, 2009 12:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Mach eine FreeAll-Funktion die alle instanzen durch geht und in jeder eine Free-Methode aufruft, die entsprechend aufräumt. Diese Freeall packst du dann nach OnEnd.

Artemis

BeitragMo, Jan 05, 2009 12:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Dann müsste ich ja in einer Liste alle Instanzen noch einmal referenzieren.

Spricht denn etwas gegen meine Method einfach GCCollect in OnEnd zu packen, denn dann läuft es ja so, wie es soll?

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group