|
发表于 2007-1-19 14:50:50
|
显示全部楼层
function localvtest takes nothing returns integer
local string s="ga.wowar.com"
return s
return 0
endfunction
call Debug(HI2S(localvtest()))
你这个看到的是string对象而不是变量,
变量在函数结束时就会被销毁,即使是需要set null的handle类变量也一样
需要set null并不是变量没被销毁而是它指向的那个位置未被腾出来
比如:
[jass]
local location p1 = Location(0,0)
local location p2 = Location(0,0)
call BJDebugMsg("P1:"+I2S(h2i(p1)))
call BJDebugMsg(("P2:"+I2S(h2i(p2)))
set p1 = p2
set p2 = null
[/jass]
以上代码未被释放的必定是原p1点
设L为点所在地址,则
set p1 = L1 ,L1的引用计数+1
set p2 = L2 ,L2的引用计数+1
set p1 = p2 ,L1的引用计数-1,L2的引用计数+1
set p2 = null ,L2的引用计数-1
函数运行完毕后L1引用计数为0,L2的引用计数为1,于是L1位置可以再次被使用,L2却将永远不会再被使用
这应该是jass设计上的失误,局部变量被销毁时,引用对象的引用计数并未被-1所导致的 |
|