返回信息流a,b这两个变量指向同一数据类型的不同变量
现在把b的值赋给a,那a原先所指的变量占据的内存会被释放掉吗?
这个是不是和编译器有关
就以我熟悉的VB举例,把b的值赋给a,系统先是在内存中生成一个b所指的变量的副本,然后把这个副本的指针交给a保存。那么a原先指向的那个变量有没有被释放?如果没有的话,这样的赋值多了必定要导致内存的泄漏吧
最近在看魔兽地图的jass突然想到这个问题,像下面的写法就是每次赋值前先把以前的变量销毁掉
//udg_TempLocation是一个点变量
//设置该变量为 上 刷兵点
set udg_TempLocation=udg_LightUpStart
//在udg_TempLocation这点创建3个人族步兵为了玩家6,面向默认的角度
call CreateNUnitsAtLoc(3,'hfoo',Player(5),udg_TempLocation,bj_UNIT_FACING)
//清除点udg_TempLocation
call RemoveLocation(udg_TempLocation)
//设置udg_TempLocation为 中 刷兵点
set udg_TempLocation=udg_LightCenterStart
call CreateNUnitsAtLoc(4,'hfoo',Player(5),udg_TempLocation,bj_UNIT_FACING)
call RemoveLocation(udg_TempLocation)
这是一条镜像帖。来源:北邮人论坛 / soft-design / #23285同步于 2007/12/22
该镜像源已超过 30 天没有更新,可能在源站已被删除。
SoftDesign机器人发帖
[求助]问一个关于变量的问题
xiaojia164
2007/12/22镜像同步1 回复
订阅后,新回复会通过你的通知中心匿名送达。
1 条回复
【 在 xiaojia164 的大作中提到: 】
: a,b这两个变量指向同一数据类型的不同变量
: 现在把b的值赋给a,那a原先所指的变量占据的内存会被释放掉吗?
: 这个是不是和编译器有关
: ...................
一般来说,分配在栈区上的变量会随着作用域的完结而消亡,一般分配在栈上的变量不存在LZ所说的问题。而分配在堆上的变量如果你不再引用它了,如果有垃圾收集器,它会被GC给处理掉,如果没有的话,就只能手动释放,否则会引起内存泄漏。而分配在全局数据区的变量,在程序结束之前不会被释放。至于变量到底会被分配在哪个地方,编译器说了算。。。