elmortem
такая да ..
а вот такая нет :
Type T1
Field t:T2
Field mem%[1000]
EndType
Type T2
Field t:T1
Field mem%[1000]
EndType
GCCollect()
DebugLog "start "+GCMemAlloced()
t_1:t1 = New t1
t_2:t2 = New t2
t_1.t = t_2
t_2.t = t_1
t_1 = Null
t_2 = Null
DebugLog "in work "+GCMemAlloced()
GCCollect()
DebugLog "final "+GCMemAlloced()
разруливается ето вот так :
Type T1
Field t:T2
Field mem%[1000]
Method Free()
t = Null
mem = Null
End Method
EndType
Type T2
Field t:T1
Field mem%[1000]
Method Free()
t = Null
mem = Null
End Method
EndType
GCCollect()
DebugLog "start "+GCMemAlloced()
For Local i% = 0 To 100
t_1:t1 = New t1
t_2:t2 = New t2
t_1.t = t_2
t_2.t = t_1
t_1.Free()
t_2.Free()
t_1 = Null
t_2 = Null
Next
DebugLog "in work "+GCMemAlloced()
GCCollect()
DebugLog "final "+GCMemAlloced()
можно конечно переопределять операторы New и Delete
но мне легче было зделать Free - так я 100% избавляюсь от перекрестных ссылок