eigenes Type After ? -> Speicherzumühlung

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

StarGazer

Betreff: eigenes Type After ? -> Speicherzumühlung

BeitragSa, Apr 05, 2008 15:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,
ich möchte in einem Object auf seinen Nachfolger schalten können. Wollte das so lösen, indem ich im Object einfach auf seinen Nachfolger zeigen lasse, jedoch wird dabei der Speicher zugemühlt

Code: [AUSKLAPPEN]

Type TWay
Field x,y
Field afterWay:TWay
EndType
WayList:TList = CreateList()


Graphics 640,480


While Not KeyDown(KEY_ESCAPE)
   ClearList WayList
   
   For i = 1 To 100
      w:TWay = New TWay
      w.x = Rand(1,100)
      w.y = Rand(1,100)
      ListAddLast WayList,w:TWay
   Next
   
   For w:TWay = EachIn WayList
      old:TWay = w
      
      If old >< Null Then w.afterWay = old  'hiermit möchte ich später auf sein nächstes Object selbst weiter schalten
   Next


   DrawText "benutzer Speichers:"+ GCMemAlloced(),10,10
   
   Flip 0
   Cls
Wend



So wie es zu Zeit ist, werden so wohl kopiert. Würden denn überhaupt bei einer Veränderung der Werte im "w.afterWay.x" auch die im UrspungsObject mitverändert ?

Gibt es eigentlich eine Ersatz für "FleshMen" ?, vielleicht könnte man das damit lös




meine zweite Frage wäre zu String.
Wenn ich einen String veränder, das auch die anderen Strings die darauf zugeifen auch verändert werden.


Code: [AUSKLAPPEN]
Graphics 640,480

a:String = "blababla"

b:String = a
b = Null


c:String = "ABCDE"
d:String = c

c = "23456"


While Not KeyDown(KEY_ESCAPE)

   DrawText A,10,10
   DrawText d,10,30
   
   Flip 0
   Cls
Wend



Das könnte man wohl alles mit Pointern lösen, aber ich habe gelesen daß das nicht so toll sein soll, und man lieber die Finger von lassen sollte.

BtbN

BeitragSa, Apr 05, 2008 16:19
Antworten mit Zitat
Benutzer-Profile anzeigen
FlushMem(Ich nehme an das meinst du) Gibt es in der aktuellen Version von BMax nicht mehr.

Blitzcoder

Newsposter

BeitragSa, Apr 05, 2008 16:39
Antworten mit Zitat
Benutzer-Profile anzeigen
In BlitzMax speichert man Objekte in der regeln in Listen. Das sind Objekte vom Typ TLIst, die man auch durchgehen kann.

Code: [AUSKLAPPEN]
SuperStrict

Type TTest
   Field in:Int
   Field do:Double
   Field st:String
EndType


Local myList:TLIst = new TList

' Objekte reinstopfen
myLIst.addLast(new TTest);
myLIst.addLast(new TTest);

For Local t:TTest = eachin TList
   ' t Ist nun das Objekt
Next

End


Dementsprechend gibts auf after etc, guck mal in die docs
P4 3 Ghz@3,55Ghz|GF 6600GT 256MB|Samsung 80GB | 2x Samsung 160GB|2048MB DDR-400 RAM|6 Mbit Flatrate | Logitech G15 | Samsung 225BW-TFT | Ubuntu Gutsy Linux | Windows Vista | Desktop | Blog | CollIDE | Worklog
________________
|°°°°°°°°°°°°°°||'""|""\__,_
|______________ ||__ |__|__ |)
|(@) |(@)"""**|(@)(@)****|(@)

StarGazer

BeitragSa, Apr 05, 2008 17:13
Antworten mit Zitat
Benutzer-Profile anzeigen
@BORNtobeNAMELESS
ja, das habe ichin vielen Themen gesehen. Aber funktioniert nicht mehr in der Aktuellen Version Sad

@Blitzcoder
Ist es den sinvoll nur wegen einem Object eine Liste erstellen ? Ne art Zeiger auf das bestimmte Object wäre doch sinvoller und sicher auch schneller (nicht nur für After, sondern auf irgendein eins)
 

Dreamora

BeitragSa, Apr 05, 2008 18:03
Antworten mit Zitat
Benutzer-Profile anzeigen
1. man braucht kein flushmem mehr. der GC von BM arbeitet von selbst. Sobald keine referenz mehr auf das objekt zeigt wirds freigeräumt. wenn immer was drauf zeigt bleibts immer

2. direkte referenz macht sinn, liste macht sinn, alles macht sinn. es kommt auf die anwendung an. du musst dir einfach immer bewusst sein das du alle referenzen aufheben musst um ein objekt wieder "los zu werden"
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group