大家看看,这几句代码会生成多少个对象?
dim i as integer
dim obj1 as myclass             'myclass是自定义的一个类for i =1 to 100
    set obj1=new myclass
next我想问,这样做会实例化100个对象呀?还是只实例化一个对象,
如果是真的实例化了100个实例,那这些实例由哪个名字来引用呢?因为obj1永远是引用最后一个实例呀!
这样是不是会造成内存泄漏呀?

解决方案 »

  1.   

    不会造成内存泄漏。VB 中内存会自动回收的,一般是出了变量的作用范围就自动回收。
    你可以在 myclass 中加入这样的代码:
    Private Sub Class_Terminate()
        MsgBox "myclass terminate"
    End Sub
      

  2.   

    不会造成内存泄漏。VB 中内存会自动回收的,一般是出了变量的作用范围就自动回收。
    你可以在 myclass 中加入这样的代码:
    Private Sub Class_Terminate()
        MsgBox "myclass terminate"
    End Sub
    ---------------------------
    谢,我试了,发现确实弹出来100次对话框,是不是说明实例了100个对象呀?
      

  3.   


    就算象楼上说的,VB不能及时回收的话,那么个人认为楼主的代码还不算是内存泄漏,我想内存泄漏应该是指无法回收的内存,而楼主这种情况VB程序结束后会自动回收的。楼主的代码最多应该是内存使用不合理,属于一种浪费。而事实上,我想楼主的代码应该不会有问题吧,上面的测试表明每向obj1赋一次值,原来的对象将被释放,VB应该可以管理的。你也可以再做个测试,加200000个对象,从资源管理器看一下内存的状态就基本可以得到答案了。
      

  4.   

    而事实上,我想楼主的代码应该不会有问题吧,上面的测试表明每向obj1赋一次值,原来的对象将被释放,VB应该可以管理的。你也可以再做个测试,加200000个对象,从资源管理器看一下内存的状态就基本可以得到答案了。
    -----------------------------------
    谢谢,我试了,内存确实没有增加,看来VB自动回收了。没有泄漏
      

  5.   

    COM对象是自管理的,引用计数为0时,自我释放