找回密码
 点一下
查看: 2810|回复: 17

对于返回值为handle类的函数清空

[复制链接]
发表于 2008-6-20 22:08:34 | 显示全部楼层 |阅读模式
突然想到一个方法
function RU takes nothing returns  unit
local unit u =CreatUnit(...)
local integer i = H2I(u)
set u = null
return I2H(I)
endfunction
这样不就行了。。所有的handle类的都可以这样,不会造成泄漏
 楼主| 发表于 2008-6-21 09:50:25 | 显示全部楼层
这办法可不可靠..有没有人会个贴阿..
回复

使用道具 举报

发表于 2008-6-21 10:42:17 | 显示全部楼层
绝对无聊的举动。


那么多bj和cj函数返回值都是handle类,为什么玻璃渣不写成你这样。
回复

使用道具 举报

 楼主| 发表于 2008-6-21 11:04:46 | 显示全部楼层
为什么要set u = null?,假如bj函数里用local unit u的话有这条么?应该没有把,难道说bj函数都内存泄漏?我真搞不懂了。。
回复

使用道具 举报

发表于 2008-6-21 11:06:37 | 显示全部楼层
你把泄露想得过于严重了。
回复

使用道具 举报

发表于 2008-6-21 11:07:17 | 显示全部楼层
据说某些特定的handle类才会泄露。
回复

使用道具 举报

 楼主| 发表于 2008-6-21 11:07:23 | 显示全部楼层
那set u=null没意义楼?
回复

使用道具 举报

发表于 2008-6-21 11:12:55 | 显示全部楼层
此贴ID是15486。

如果我用另外一个变量A记录,那么如果我使用把A置为NULL,那么帖子是不是就不在了呢?

明显不是,还是得等头目删贴。

那么如果A不清空,在头目删了贴后是否会泄露呢,不会,它只是会指向一个无用的帖子而已。
回复

使用道具 举报

 楼主| 发表于 2008-6-21 11:23:22 | 显示全部楼层
所以set u=null就是没意义楼!那为什么人人都喜欢写这个。。
回复

使用道具 举报

发表于 2008-6-21 11:44:15 | 显示全部楼层
引用第7楼thody于2008-06-21 11:12发表的  :
不会,它只是会指向一个无用的帖子而已。。
.......



指向一个无用的帖子  不就是泄露嘛

这块内存已经无法重复利用
回复

使用道具 举报

发表于 2008-6-21 11:45:15 | 显示全部楼层
引用第8楼ζtormξnvoy于2008-06-21 11:23发表的  :
所以set u=null就是没意义楼!那为什么人人都喜欢写这个。。


显然是有意义的
否则还是泄露
回复

使用道具 举报

 楼主| 发表于 2008-6-21 11:48:02 | 显示全部楼层
所以我一开始写的函数是有意义的楼?
我知道实际在调用后还要清除该单位
我只是排除了一个局部变量的泄漏阿
回复

使用道具 举报

发表于 2008-6-21 12:20:16 | 显示全部楼层
指向 无用的内存 不代表 那块内存不能使用吧
别的指针 仍然可以指向那块内存
比方说 你自己编了 一个指向 空网站的 ip地址
那别人仍可以用 用这个ip做网站吧
回复

使用道具 举报

发表于 2008-6-21 13:18:56 | 显示全部楼层
引用第12楼幽阳于2008-06-21 12:20发表的  :
指向 无用的内存 不代表 那块内存不能使用吧
别的指针 仍然可以指向那块内存
比方说 你自己编了 一个指向 空网站的 ip地址
那别人仍可以用 用这个ip做网站吧


但是,你要知道u是局部变量
只有局部的作用域
出了这个函数后
你还怎么能够访问到u
怎么能用别的指针  指向这块内存
回复

使用道具 举报

发表于 2008-6-21 15:23:45 | 显示全部楼层
引用第12楼幽阳于2008-06-21 12:20发表的  :
指向 无用的内存 不代表 那块内存不能使用吧
别的指针 仍然可以指向那块内存
比方说 你自己编了 一个指向 空网站的 ip地址
那别人仍可以用 用这个ip做网站吧

事实上是的。
因为War3的handle类型有一个引用计数
当有变量指向它时引用计数+1
当有指向它的变量被set null时,引用计数-1
只有当引用计数=0时,该变量的空间才会被系统回收再利用。
我说的也不够严谨,如果深究这个问题的话,可以看看这个帖子:
深入return bug -- 看看H2I返回值的背后
http://www.islga.org/bbs/read.ph ... ;toread=&page=2
回复

使用道具 举报

 楼主| 发表于 2008-6-21 15:38:55 | 显示全部楼层
我知道了。。
回复

使用道具 举报

发表于 2008-6-21 17:47:32 | 显示全部楼层
那是因为玻璃渣直接就用的
set udg_u
声明了局部的话肯定要 set u=null的。
回复

使用道具 举报

发表于 2008-6-21 18:23:58 | 显示全部楼层
呵呵  是这样的 啊
我一直认为 handle就是指针呢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 点一下

本版积分规则

Archiver|移动端|小黑屋|地精研究院

GMT+8, 2024-11-24 07:58 , Processed in 0.091647 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表