Kopie von einem beliebigem Objekt machen?
Übersicht

![]() |
das wurgelBetreff: Kopie von einem beliebigem Objekt machen? |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich glaube es vor kurzem schonmal hier gelesen zu haben, aber ich kann den Thread nicht mehr finden: Kann man eine Kopie von einem beliebigem BlitzMax Objekt machen, ohne für jede Instanzvariable extra bubbkopie.a=blubb.a; blubbkopie.b=blubb.b usw. zu schreiben? | ||
1 ist ungefähr 3 |
![]() |
coolo |
![]() Antworten mit Zitat ![]() |
---|---|---|
https://www.blitzforum.de/foru...hp?t=33951
Have fun |
||
http://programming-with-design.at/ <-- Der Preis ist heiß!
That's no bug, that's my project! "Eigenzitate sind nur was für Deppen" -Eigenzitat |
![]() |
das wurgel |
![]() Antworten mit Zitat ![]() |
---|---|---|
thanks ![]() |
||
1 ist ungefähr 3 |
![]() |
maximilian |
![]() Antworten mit Zitat ![]() |
---|---|---|
Im Zweifelsfalle wäre es sicher besser, einfach Kopiermethoden zu schreiben. Das wäre die sauberste Lösung. Wenn du keine komplexen Datenstrukturen kopieren willst, löst auch
BlitzMax: [AUSKLAPPEN] Local new_obj:tType = New tType dein Problem. |
||
Variety is the spice of life. One day ignore people, next day annoy them. |
![]() |
das wurgel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hm ja ich glaube das wäre praktischer. Kopiert das nur die elementaren Variablen und die Referenzen bleiben die Selben?
edit: Funktioniert das auch mit Vererbung? Also wenn ich jetzt eine Variable vom Basistypen habe mit nem Objekt von einem erweiterten, ist die Kopie dann auch vom erweiterten Typ? |
||
AvaGast |
![]() Antworten mit Zitat |
|
---|---|---|
Bei MemCopy habe ich die Erfahrung gemacht, dass der GC damit nicht gut umgehen kann und es im weiteren Verlauf zu Fehlern und Abstürzen kommen kann. Es ist schon eine ganze Weile her, dass ich damit zum Kopieren von Objekten herumexperimentiert habe, und ich weis nicht, ob dieses Problem noch aktuell ist, aber ich wollte es dennoch besser mal erwähnen. ^^
(ich vermute, das betrifft wohl vorallem Objektreferenzen, deren Pointer zwar kopiert, aber vom GC nicht gezählt werden, und daher dann plötzlich Objekte getrasht werden, die eigentlich noch in Verwendung sind *spekulier* ![]() |
||
![]() |
das wurgel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Okay, ich wollte es gerade testen, da fällt mir auf, dass ich nicht weis, wie groß der Speicherbereich des Objekts ist. Wie krieg ich das raus? | ||
1 ist ungefähr 3 |
![]() |
mpmxyz |
![]() Antworten mit Zitat ![]() |
---|---|---|
Stichwort: "SizeOf"
Ich würde aber eher das clone-Modul nutzen, da die Pointer-Variante nicht zwangsläufig funktionieren muss. (Es könnten die schon angesprochenen GC-Probleme auftreten.) mfG mpmxyz |
||
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer |
![]() |
das wurgel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Der GC scheint zu erkennen, dass da ein neuer Pointer enstanden ist:
Code: [AUSKLAPPEN] Local bla:TTest1 = New TTest1
bla.test = New TTest2 Print "bla.test: "+ bla.test.variable Local blubb:TTest1 = New TTest1 MemCopy(Byte Ptr(blubb), Byte Ptr(bla), SizeOf(bla)) Print "blubb.test: " + blubb.test.variable Print "So und jetzt löscht der DC Bla" bla=Null GCCollect() Print "blubb.test: " + blubb.test.variable Type TTest1 Field test:TTest2 End Type Type TTest2 Field variable$="Ich existiere noch." End Type Ich glaube ich werde erstmal die MemCopy Funktion nehmen und wenn Bugs auftreten nehme ich entweder ChaosClone oder ich überleg mir was anderes. Danke für die Ratschläge edit: Code verbessert, aber alles bleibt beim alten. |
||
1 ist ungefähr 3 |
- Zuletzt bearbeitet von das wurgel am Sa, Mai 22, 2010 0:51, insgesamt einmal bearbeitet
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] bla=Null
Werf den GC per hand an, um sicher zu gehen!
GCcollect() |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group