当前位置:编程学习 > VB >>

如果程序里有两个孤立的对象,程序结束后先释放掉的是后建立的那一个

“孤立的对象”指由程序建立的对象,但是不再有任何对象变量引用它。

试了试,好像“如果程序里有两个孤立的对象,程序结束后先释放掉的是后建立的那一个。”这是不是一般规律?
--------------------编程问答-------------------- 如果是后入先出的话,那么很像“栈管理”的方式……这就好理解了。内存管理可能是栈管理模式,所以是最后建立的最先析构掉。 --------------------编程问答-------------------- 如果没有显式的释放对象的话,是这个个规律。 --------------------编程问答-------------------- 我是来帮忙顶的 --------------------编程问答-------------------- 我好奇的是楼主是怎么试的?:-) --------------------编程问答--------------------
引用 4 楼 kmzs 的回复:
我好奇的是楼主是怎么试的?:-)


我在terminate事件里debug.print object.name --------------------编程问答-------------------- VB应该是使用引用计数方式来释放对象,当一个对象的引用计数为0,那么释放掉它。对象是在堆上分配的,所以一般来说是这样的。
有的环境,比如.NET,应该是从所有命名对象查找,把所有引用对象添加到这样一个森林里,剩下的就是不再使用的对象,然后依次释放。
所以不一定的。 --------------------编程问答-------------------- 我认为顺序是不定的(当然啊,俺只是理论推测),
因为从内存回收的角度来看,应该是不会记录对象分配顺序的。 --------------------编程问答-------------------- 总之,VB是不可能用栈的方式来管理对象的状况,栈需要连续内存,一般要在启动程序后分配。分配太大浪费,太小不够用。应该是以类似字典或hash之类的方式来保存引用计数的。 --------------------编程问答-------------------- 不一定。
在过程结束时的释放次序和程序结束时的释放次序不同。

如果需要限定释放次序就用显式释放。 --------------------编程问答-------------------- 既然是"孤立的对象"的对象,为什么一开始就要实例化它,应该在用的时候才实例化.

究竟哪个先被释放,可能不像上面说的这么简单,比如有可能和类内部的一些机制有关(比如A类引用了一些API而B类没有引用任何API)

....... --------------------编程问答-------------------- VB6本身的运行机制就比C++/C来得烦的多
补充:VB ,  非技术类
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,