Seite 2 von 2

Verfasst: 21.06.2009 18:18
von mk-soft
Update v0.44

Jetzt mit Übergabe von Parametern an InitObject(...)
Ohne Paramtern kann weiterhin NewObject(ClassName) verwendet werden. Mit Parametern muss NewClassName(para1, etc) verwendet werden.
Die Objekteigenschaft "*parent" wurde entfernt und muss jetzt selber angelegt werden.

Beispiel

Code: Alles auswählen


; Example Part 3 - avoidance of memory leak with method InitObject and DestroyObject

Class(MemClass)
  *mem1
  *mem2
EndClass

; Init memory
Method MemClass_InitObject(*this.MemClass, size.i) ; <- NewMemClass calling InitObject
  With *this
    Debug "InitObject: AllocateMemory."
    \mem1 = AllocateMemory(size*1024)
    \mem2 = AllocateMemory(size*1024)
  EndWith
EndMethod

Method MemClass_GetMemPointer(*this.MemClass, number.l)
  Select number
    Case 1 : ProcedureReturn *this\mem1
    Case 2 : ProcedureReturn *this\mem2
    Default : ProcedureReturn 0
  EndSelect
EndMethod

Method MemClass_DestroyObject(*this.MemClass) ; <- DeleteObject or Release calling DestroyObject
  
  Debug "DestroyObject: Free Memory."
  FreeMemory(*this\mem1)
  FreeMemory(*this\mem2)
  
EndMethod

; Test Part 3
Debug "Test Part 3"
Debug ""
Debug "Mem Test 1"
*mem.IMemClass = NewMemClass(10)
Debug "Address of Obj : " + Str(*mem)
Debug "Address of mem1: " + Str(*mem\GetMemPointer(1))
Debug "Address of mem2: " + Str(*mem\GetMemPointer(2))
DeleteObject(*mem)
;*mem\Release()
Debug ""

Debug "Mem Test 2"
*mem.IMemClass = NewMemClass(10)
Debug "Address of Obj : " + Str(*mem)
Debug "Address of mem1: " + Str(*mem\GetMemPointer(1))
Debug "Address of mem2: " + Str(*mem\GetMemPointer(2))
DeleteObject(*mem)
;*mem\Release()
Debug ""

Debug "Mem Test 3"
*mem.IMemClass = NewMemClass(10)
Debug "Address of Obj : " + Str(*mem)
Debug "Address of mem1: " + Str(*mem\GetMemPointer(1))
Debug "Address of mem2: " + Str(*mem\GetMemPointer(2))
DeleteObject(*mem)
;*mem\Release()
Debug ""

Debug "Mem Test 4"
*mem.IMemClass = NewMemClass(10)
Debug "Address of Obj : " + Str(*mem)
Debug "Address of mem1: " + Str(*mem\GetMemPointer(1))
Debug "Address of mem2: " + Str(*mem\GetMemPointer(2))
DeleteObject(*mem)
;*mem\Release()
Debug ""
FF :wink:

Verfasst: 25.06.2009 00:19
von mk-soft
Update v0.45

Bugfix:
- Memory Manager

Sorry... Schwerer fehler in der Speicherwaltung in der Version 0.44