Seite 1 von 1
eine Art new-Funktion ... wie machen?
Verfasst: 08.11.2015 11:07
von es_91
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" ..
Code: Alles auswählen
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
Bitte .. Hilfe .. ^^
Re: eine Art new-Funktion ... wie machen?
Verfasst: 08.11.2015 11:14
von GPI
Lies mal den Thread durch:
http://www.purebasic.fr/german/viewtopi ... =8&t=29124
Da werden mehrere Methoden beschrieben, wie man Klassen und Objekte in PB realisieren kann.
Re: eine Art new-Funktion ... wie machen?
Verfasst: 08.11.2015 11:17
von es_91
Danke für den Link, GPI. Werd ich mir mal in einer ruhigen Stunde zu Geiste führen ..
Mir fiel die Lösung gerade wieder ein.. irgendwo hatte ich das mal gelesen .. sollte mal besser vorher die Suche benutzen ..
Code: Alles auswählen
Procedure GiveMeAHandle (X, Y)
Protected *Obj. Class = AllocateMemory (SizeOf (Class))
*Obj\ X = X
*Obj\ Y = Y
ProcedureReturn *Obj
EndProcedure
Re: eine Art new-Funktion ... wie machen?
Verfasst: 08.11.2015 11:24
von GPI
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.
Re: eine Art new-Funktion ... wie machen?
Verfasst: 08.11.2015 11:28
von es_91
Wenn ich das nicht freigebe liegt das dann wohl nach Programmschluss im Speicher? Oh...
Danke
Re: eine Art new-Funktion ... wie machen?
Verfasst: 08.11.2015 11:46
von GPI
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.
Re: eine Art new-Funktion ... wie machen?
Verfasst: 08.11.2015 12:14
von es_91
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.
