eine Art new-Funktion ... wie machen?

Für allgemeine Fragen zur Programmierung mit PureBasic.
es_91
Beiträge: 411
Registriert: 25.01.2011 04:48

eine Art new-Funktion ... wie machen?

Beitrag 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 .. ^^
GPI
Beiträge: 1511
Registriert: 29.08.2004 13:18
Kontaktdaten:

Re: eine Art new-Funktion ... wie machen?

Beitrag 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.
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!
es_91
Beiträge: 411
Registriert: 25.01.2011 04:48

Re: eine Art new-Funktion ... wie machen?

Beitrag 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
GPI
Beiträge: 1511
Registriert: 29.08.2004 13:18
Kontaktdaten:

Re: eine Art new-Funktion ... wie machen?

Beitrag 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.
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!
es_91
Beiträge: 411
Registriert: 25.01.2011 04:48

Re: eine Art new-Funktion ... wie machen?

Beitrag von es_91 »

Wenn ich das nicht freigebe liegt das dann wohl nach Programmschluss im Speicher? Oh...

Danke
GPI
Beiträge: 1511
Registriert: 29.08.2004 13:18
Kontaktdaten:

Re: eine Art new-Funktion ... wie machen?

Beitrag 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.
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!
es_91
Beiträge: 411
Registriert: 25.01.2011 04:48

Re: eine Art new-Funktion ... wie machen?

Beitrag 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. :)
Antworten