Bug im Destruktor

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

Vertex

Betreff: Bug im Destruktor

BeitragDi, Apr 19, 2005 0:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
Strict

Type TEntity
   Global List : TList
   
   Method New()
      Print "Ich bin neu hier!"
      TEntity.List.AddLast(Self)
   End Method
   
   Method Delete()
      Print "Ich muss weg!"
      TEntity.List.Remove(Self)
   End Method
End Type

TEntity.List = CreateList()


Local MyEntity:TEntity = New TEntity

MyEntity = Null
FlushMem()


Hier wird nie "Ich muss weg!" ausgegeben. Komischerweise geht es aber bei:
Code: [AUSKLAPPEN]
   Method Delete()
      Print "Ich muss weg!"
   End Method


Unwarscheinlich das der Fehler bei mir liegt ?oder

mfg olli

Edit: TEntity.List.Remove(Self) wird ebenfalls nie ausgeführt
vertex.dreamfall.at | GitHub
 

Dreamora

BeitragDi, Apr 19, 2005 0:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich vermute die zweite Fassung enthält auch ein New ohne die Liste?!

Denn wenn du es zur Liste hinzufügst kann es NIE freigegeben werden, solange es nicht aus der Liste entfernt wurde, da dort immer noch eine Referenz besteht.
Sprich du musst dir dazu eine Destroy Methode schreiben, die die Entity aus der Liste nimmt, bevor du sie = Null setzt.

*Der Destruktor wird ja aufgerufen, wenn die Instanz vom GarbageCollector freigegeben wird, was nur eintritt, wenn die Instanz nirgends mehr referenziert ist, also auch nicht in der eigenen TypeList*
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Vertex

BeitragDi, Apr 19, 2005 0:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Bähh, da denkt man, man macht es sich über den Destruktor einfach, aber nee Smile

Hmm dann arbeite ich event. mit Register und UnRegister oder so. Bringt mal wieder meine ganze Planung durcheinander.

Dennoch danke!

mfg olli
vertex.dreamfall.at | GitHub

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group