找回密码
 点一下
查看: 1080|回复: 7

call RemoveUnit(unit_hero) 和 set unit_hero=null是不是重复了?

[复制链接]
1 GA币 回复本帖可获得 1 GA币奖励! 每人限 1 次(中奖概率 20%)
发表于 2013-3-14 19:54:08 | 显示全部楼层 |阅读模式
本帖最后由 LANGRENBULE 于 2013-3-16 14:59 编辑

如题,call RemoveUnit(unit_hero) 不就是清空unit_hero这个单位吗?那么 set unit_hero=null是不是多余了?
发表于 2013-3-14 20:48:21 | 显示全部楼层
前者是删除实际单位;后者是把变量清空,释放句柄

点评

按我的理解,其实call RemoveUnit(unit_hero)实际上就是设置unit_hero这个变量为空!因为删除了实际单位,那么unit_hero这个变量就没有指向特定的值,这个的话,unit_hero的值就是null了,不是吗?  详情 回复 发表于 2013-3-15 15:59
回复

使用道具 举报

发表于 2013-3-14 21:33:24 | 显示全部楼层
貌似2个变量都是局部的,不多余

点评

两个变量?只有一个变量 【unit_hero】  详情 回复 发表于 2013-3-15 16:02
回复

使用道具 举报

 楼主| 发表于 2013-3-15 15:59:02 | 显示全部楼层
chyj4747 发表于 2013-3-14 20:48
前者是删除实际单位;后者是把变量清空,释放句柄

按我的理解,其实call RemoveUnit(unit_hero)实际上就是设置unit_hero这个变量为空!因为删除了实际单位,那么unit_hero这个变量就没有指向特定的值,这个的话,unit_hero的值就是null了,不是吗?
回复

使用道具 举报

 楼主| 发表于 2013-3-15 16:02:06 | 显示全部楼层
evenxn007 发表于 2013-3-14 21:33
貌似2个变量都是局部的,不多余

两个变量?只有一个变量 【unit_hero】
回复

使用道具 举报

发表于 2013-3-15 21:55:41 | 显示全部楼层
LANGRENBULE 发表于 2013-3-15 15:59
按我的理解,其实call RemoveUnit(unit_hero)实际上就是设置unit_hero这个变量为空!因为删除了实际单位, ...

LZ这么想吧。。RemoveUnit把单位移除之后,这个单位的数据还在,只是无法再次放进地图而已,你可以把单位移除后再从unit_hero里获取数据试试,比如单位名字、血量之类的
回复

使用道具 举报

发表于 2013-3-16 01:47:48 | 显示全部楼层
这说法完全不正确。

RemoveUnit以后单位当然不存在于游戏里了。

需要set null的原因只是为了减去对这个handle的引用数量。War3的handle回收规则是,当脚本变量对它的引用数为0而且其对应的对象被销毁时可以回收。

正常来说,单位被删除时应该一并清除所有对这个单位handle的引用。但是局部变量有bug,导致不会减少引用数。所以要强制把他set null,让引用数减少。方便handle的回收。

所谓handle泄露,其实只是一个整数的空间而已,根本不是一整个单位。

而且set null的意义并不在于清除这么一个整数的空间,而是减小handle表,以保证查询效率而已。
回复

使用道具 举报

 楼主| 发表于 2013-3-16 14:59:19 | 显示全部楼层
麦大的回答很精辟,谢谢麦大,谢谢chyj4747
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-28 21:26 , Processed in 0.427683 second(s), 29 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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