Pointer oder Kopie?
Übersicht

![]() |
DaysShadowBetreff: Pointer oder Kopie? |
![]() Antworten mit Zitat ![]() |
---|---|---|
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-XBetreff: ..... |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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-XBetreff: ..... |
![]() Antworten mit Zitat ![]() |
---|---|---|
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-XBetreff: ..... |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ah, dein Nachtrag klärt die Sache jetzt, vielen dank!
War wohl wirklich etwas spät gestern ![]() MfG DaysShadow |
||
Blessed is the mind too small for doubt |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group