游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2303|回复: 8

一个问题

[复制链接]

87

主题

790

帖子

806

积分

高级会员

Rank: 4

积分
806
QQ
发表于 2005-8-22 22:09:00 | 显示全部楼层 |阅读模式
Dim b As New Collection
Dim a As New Collection
b.Add 1
b.Add 2
b.Add 3
Set a = b
a.Remove 1
MsgBox b.Count
为什么是2  

set a=b
明明删a的怎么b会少了?难道是传址?

32

主题

1583

帖子

1589

积分

金牌会员

Rank: 6Rank: 6

积分
1589
发表于 2005-8-22 22:22:00 | 显示全部楼层

Re:一个问题

肯定啊,你应该把Set语句理解为指针(不使用New关键字)。
虽然拟定义了一个新的集合,但是执行了Set a = b后,a就成了b的一个引用了。

87

主题

790

帖子

806

积分

高级会员

Rank: 4

积分
806
QQ
 楼主| 发表于 2005-8-22 22:28:00 | 显示全部楼层

Re: Re:一个问题

sandy_zc_1: Re:一个问题

肯定啊,你应该把Set语句理解为指针(不使用New关键字)。
虽然拟定义了一个新的集合,但是执行了Set a = b后,a就成了b的一个引用了。

那怎么样才能做到a和b互不影响?

130

主题

2714

帖子

2714

积分

金牌会员

Rank: 6Rank: 6

积分
2714
发表于 2005-8-22 22:48:00 | 显示全部楼层

Re:一个问题

你看我的游戏程序开始定义部分:
Private BOMBA As PictureBox
Load TANKPIC(4)
TANKPIC(4).Picture = LoadPicture("GRAPH\BOMB2.GIF"): Set BOMBA = TANKPIC(4)

53

主题

241

帖子

252

积分

中级会员

Rank: 3Rank: 3

积分
252
发表于 2005-8-22 23:40:00 | 显示全部楼层

Re:一个问题

我也追问一个

他先New了一个a,在Set a = b时,是不是等于:
Set a = Nothing
Set a = b
还是说,VB根本不帮你Set Nothing,死了还占着地方?

32

主题

1583

帖子

1589

积分

金牌会员

Rank: 6Rank: 6

积分
1589
发表于 2005-8-23 09:36:00 | 显示全部楼层

Re: Re: Re:一个问题

陈?: Re: Re:一个问题


那怎么样才能做到a和b互不影响?


你想让他们不相互影响就不要相互引用。
你可以这样理解:
Dim b As New Collection
这一句创建了一个新的集合,然后创建了一个名为b的指针,并把它指向那个集合。

Dim a As New Collection
这一句也一样。

Set a = b
这一句把指针a的指向改为b所指的那个集合。
而a原来的那个集合因为引用数为0所以被释放。

32

主题

1583

帖子

1589

积分

金牌会员

Rank: 6Rank: 6

积分
1589
发表于 2005-8-23 09:45:00 | 显示全部楼层

Re: Re:一个问题

zlcnkkm: Re:一个问题

我也追问一个

他先New了一个a,在Set a = b时,是不是等于:
Set a = Nothing
Set a = b
还是说,VB根本不帮你Set Nothing,死了还占着地方?


关于vb的垃圾处理方式我还没有见到有相关介绍书籍,不过我认为vb是会自动判断一个对象的引用数是否为零,如果为零就释放它的空间。
所以在过程中定义的类在过程结束后都会自动释放,并调用Class_Terminate事件。

89

主题

822

帖子

847

积分

高级会员

Rank: 4

积分
847
发表于 2005-8-23 10:37:00 | 显示全部楼层

Re:一个问题

写过VC的代码就比较容易理解VB6的很多做法了,呵呵,其实差不多的

73

主题

612

帖子

618

积分

高级会员

Rank: 4

积分
618
发表于 2005-8-23 10:53:00 | 显示全部楼层

Re: Re: Re:一个问题

sandy_zc_1: Re: Re:一个问题



关于vb的垃圾处理方式我还没有见到有相关介绍书籍,不过我认为vb是会自动判断一个对象的引用数是否为零...


同意,当某个对象的所有引用都被设为NOthing,这个对象就会被系统释放。所以特别注意编程的时候不要让两个对象相互引用或在对象内部释放自己,这样坐形成交叉引用是无法释放对象的
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-27 13:36

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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