Verfasst: 21.06.2009 18:18
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
FF 
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 ""
