找回密码
 点一下
查看: 1058|回复: 5

set null 跟 destory 有啥区别

[复制链接]
发表于 2010-12-30 09:24:40 | 显示全部楼层 |阅读模式
比如  local trigger a=CreateTrigger()
         set  a =null
跟    local trigger a=CreateTrigger()
       call  DestoryTrigger(a)
两种方法都可以达到排泄的目的么??
假如有一个trigger a(局部变量) 然后有3个指针指向它,是不是要把每个指针都set null才能排泄呢??
发表于 2010-12-30 09:42:26 | 显示全部楼层
未命名.PNG

画了一张示意图
当我们用trigger a=CreateTrigger()创建了一个触发,假设它的handleId是654321,那么其实分配了这样一块内存,并且有一个引用a指向它
如果我们只调用了call DestroyTrigger(a),那么这块内存的内容被销毁,但是引用a依旧指向它
如果我们只是set a = null,那么a不再指向它,但这块内存的内容依旧是这个触发
如果我们先调用了call DestroyTrigger(a),再set a = null,那么这块内存的内容被销毁,并且引用a不再指向它

jass脚本中,只有当一个handle所用的内存内容被销毁,并且不再有引用指向它的时候,这部分内存才能够被回收,才算是排泄成功
回复

使用道具 举报

 楼主| 发表于 2010-12-30 09:56:34 | 显示全部楼层
要是全局变量的话只要销毁就可以了吧
回复

使用道具 举报

发表于 2010-12-30 10:08:07 | 显示全部楼层
嗯,其实如果要立即释放的话最好也设null,否则要到下次赋值的时候这个引用才会被干掉
回复

使用道具 举报

 楼主| 发表于 2010-12-30 15:57:49 | 显示全部楼层
测试的时候发现,如果仅仅是set null 的话,根本就没有排泄,如果Destroy的话,排泄了大部分,如果先Destroy再set null的话就完美了
回复

使用道具 举报

 楼主| 发表于 2010-12-30 15:58:14 | 显示全部楼层
谢谢斑竹
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-28 12:03 , Processed in 0.166979 second(s), 21 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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