Показать сообщение отдельно
Старый 07.09.2007, 17:24   #68
jimon
 
Сообщений: n/a
Re: elmax - набросок фреймворка

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% избавляюсь от перекрестных ссылок
 
Ответить с цитированием