Pointer oder Kopie?

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

DaysShadow

Betreff: Pointer oder Kopie?

BeitragSa, Apr 18, 2009 0:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
Type TTest
   
   Field Number:Int
   
EndType

Type TTest2
   
   Field Test:TTest
   
EndType

Local _Test:TTest = New TTest

_Test.Number = 5

Local _Test2:TTest2 = New TTest2

_Test2.Test = _Test

Print _Test2.Test.Number 'Gibt 5 aus

_Test = Null

Print _Test2.Test.Number 'Gibt ebenfalls 5 aus, daher denke ich dass es kein Pointer ist


Wird hier bei Übergabe von _Test an _Test2.Test ein Pointer auf _Test erzeugt oder wird _Test in _Test2.Test kopiert, sodass ich sogesehen 2 Mal _Test habe?

MfG DaysShadow
Blessed is the mind too small for doubt

Suco-X

Betreff: .....

BeitragSa, Apr 18, 2009 1:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Objekte sind Adressen und werden deshalb nicht kopiert wenn nicht gefordert.
Beweis:

Code: [AUSKLAPPEN]

Type TTest
   
   Field Number:Int
   
EndType

Type TTest2
   
   Field Test:TTest
   
EndType

Local _Test:TTest = New TTest

_Test.Number = 5

Print "Test Ptr: "+Int(Byte Ptr(_Test))

Local _Test2:TTest2 = New TTest2

_Test2.Test = _Test

Print _Test2.Test.Number 'Gibt 5 aus

Print "Test2->Test Ptr: "+Int(Byte Ptr(_Test2.Test))

_Test = Null

Print _Test2.Test.Number 'Gibt ebenfalls 5 aus, daher denke ich dass es kein Pointer ist

Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB

DaysShadow

BeitragSa, Apr 18, 2009 2:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok, also wäre ja _Test2.Test ein Pointer auf _Test, nur verstehe ich jetzt nicht warum _Test2.Test.Number immer noch 5 ausgibt und mir nicht sagt, dass die Variable bzw. das Field Test nicht existiert und dementsprechend auch Number nicht existiert.


Code: [AUSKLAPPEN]
_Test2.Test = _Test

Print _Test2.Test.Number 'Gibt 5 aus

Print "Test2->Test Ptr: "+Int(Byte Ptr(_Test2.Test))

_Test = Null ' Hier setze ich das worauf Test2.Test zeigt doch auf Null, warum gibt er mir eine Zeile tiefer trotzdem noch die Zahl aus wenn der Pointer doch eigentlich auf Null zeigt?

Print _Test2.Test.Number


Vielleicht habe ich in meinen C++ Ausflügen ja auch irgendwas falsch verstanden oder würfel hier irgendwas durcheinander?

Auf jeden Fall schonmal danke!

MfG DaysShadow
Blessed is the mind too small for doubt

Suco-X

Betreff: .....

BeitragSa, Apr 18, 2009 2:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Test ist ein Objekt und beinhaltet die Adresse der Integer Variable Number. Wenn du mit Test rumspazierst hat das keinen einfluss auf Number. Test ist der Ansprechpartner, nicht die Kinder (Number) von Test.
Mfg Suco
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB

Suco-X

Betreff: .....

BeitragSa, Apr 18, 2009 21:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Habe gestern Nacht deinen letzten Post ein wenig fehlverstanden, deswegen noch ein kleiner Nachschlag.
Er gibt 5 aus da _Test und _Test2.Test zwar auf die gleiche Adresse zeigen, aber dennoch zwei verschiedene Variablen sind. Nullst du _Test2.Test, dann bekommst du den gewünschten Fehler bei der Ausgabe. Mit _Test = Null zerstörst du also nicht das Objekt, welches sich bei der Adresse befindet, sondern änderst nur die Adresse der Variable _Test (In dem Fall auf Null).
Sobald _Test = Null und _Test2.Test = Null sind, kümmert sich der GC von BlitzMax um das Objekt und zerstört es bei Gelegenheit.
Mfg Suco
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB

DaysShadow

BeitragSa, Apr 18, 2009 21:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Ah, dein Nachtrag klärt die Sache jetzt, vielen dank!
War wohl wirklich etwas spät gestern Wink

MfG DaysShadow
Blessed is the mind too small for doubt

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group