松原163供求信息网江北:vb问题:VB变量的使用范围与局部对象的探讨! 简单解答即可,谢谢!!!

来源:百度文库 编辑:神马品牌网 时间:2024/05/06 10:49:19
我们在进行VB程序设计的时候经常遇到这样的情况:

dim tsr as CLASS_A

sub form_load()
tsr=new CLASS_A
end sub

tsr是个窗体级别的变量,对sub form_load是可见的。

这样我们就产生了一个tsr的实例。那么我们该怎么释放
这个变量呢?

大家都知道,一旦对象被实例化了以后就要产生内存的消耗
那么我们释放变量的目的就是要释放资源。有的朋友可能想
到了用这样的办法:tsr=nothing 来释放。

ok!假设tsr=nothing可以成功,那么我们把代码再改一下:

public HAHA as CLASS_A
dim tsr as CLASS_A
sub form_load()
tsr=new CLASS_A
HAHA=tsr
end sub

那么我们执行了tsr=nothing后,那系统资源CLASS_A的实例会被释放掉吗?
还好,我们只tsr=new CLASS_A了一次,那么我们这样:

dim a as integer
for a=0 to 100
tsr=new CLASS_A
next
HAHA=tsr

那么HAHA到底是不是指到了最后一个CLASS_A的实例呢??

最后的问题:对象产生多了,不知道如何释放,造成内存泄露。
vb没个无主对象的回收机制!

vb6.0中创建对象用Set tsr=new CLASS_A
问题是像楼主这样的做法,HAHA=tsr这两个对象是直接等于。还有就是VB6.0中
for a=0 to 100
tsr=new CLASS_A
next
这种代码不知道正不正确,如果正确。即使循环100此tsr也只是一个对象,而不是100个对象。因为这么做只是改变了100次tsr的类型,并没有新建100个tsr

vb6.0中创建对象用Set tsr=new CLASS_A
问题是像楼主这样的做法,HAHA=tsr这两个对象是直接等于。还有就是VB6.0中
for a=0 to 100
tsr=new CLASS_A
next
这种代码不知道正不正确,如果正确。即使循环100此tsr也只是一个对象,而不是100个对象。因为这么做只是改变了100次tsr的类型,并没有新建100个tsr

vb6.0中创建对象用Set tsr=new CLASS_A
问题是像楼主这样的做法,HAHA=tsr这两个对象是直接等于。还有就是VB6.0中
for a=0 to 100
tsr=new CLASS_A
next
这种代码不知道正不正确,如果正确。即使循环100此tsr也只是一个对象,而不是100个对象。因为这么做只是改变了100次tsr的类型,并没有新建100个tsr

首先是你的循环100次,他也就只实例化了一个对象,释放的时候,用一次tsr=nothing就行了
还有 HAHA=tsr 由于是对象,付值是按引用也就是按地址传递,也就是这两个对象在内存中占用的是同一个内存地址空间,释放其中一个,另一个也就被释放了。
楼主不信可以试试!!