Hi. Ich wolte mir von meiner Give-Funktion immer eine neue Instanz einer Klasse, äh meine Struktur, machen lassen. Aber wie geht das? Das hier angeschlagenen Beispiel funktioniert nur für eine "Instanz" ..
Structure Class
X. i
Y. i
EndStructure
Procedure GiveMeAHandle (X, Y)
Shared Obj. Class
Obj\ X = X
Obj\ Y = Y
ProcedureReturn @Obj
EndProcedure
*Object1. Class = GiveMeAHandle (10, 20)
Debug *Object1\ X
Debug *Object1\ Y
*Object2. Class = GiveMeAHandle (80, 90)
Debug *Object2\ X
Debug *Object2\ Y
Debug *Object1\ X ; und hier habe ich in Wirklichkeit Object2 an der Kralle
Debug *Object1\ Y
Ich würde da lieber AllocateStructure benutzen. Bei so einfachen Strukturen macht das keinen unterschied, aber wenn mal Listen etc. in der Struktur sind, brauchst du das.
Und nicht vergessen, das ganze mit FreeStructure() freizugeben.
Also bei Programmabschluss wirds freigegeben, das macht schon Windows von alleine.
Nur das ist imo ein ganz schlechter Programmierstiel. Man sollte es immer alles freigeben, das man mal erzeugt hat.
Wenn du mal eine Recursive Funktion (eine Funktion, die sich selbst wieder selbst aufruft, bspw. wenn man ein Verzeichnis samt Unterverzeichnisse scannt) hast und dort genauso rangehst, wird immer mehr Speicher verbraten, bis das OS die Notbremse zieht.
Gewöhn dir am besten an, das Freigeben immer einzuplanen. Dann vermeidest du solche Fehler eher.
Stimmt. Bei Rekursion, lernt man ja auch in der Ausbildung, immer freigeben. Aber so ne kleine Instanz irgendwo im Code... gut zu wissen, dass man die auch ignorieren könnte.