为何定义窗体变量时,用dim frm as form1时,可以用set frm=nothing释放,但是用dim frm as new form1时,总是无法用 set frm=nothing 释放
-----------------------------
如果:
dim frm as new form1
则我如果用 set frm=nothing后,再判断 
if frm is nothing 则不会是nothing的状态。但是 dim frm as form1
却可以用 set frm=nothing的方法真正释放。
然后frm确实是nothing的状态。这是为什么呢?
举例说吧,如果定义一个窗体级的对象。那么只要用到new,就不能在窗体中将这个对象释放,是这样吗?

解决方案 »

  1.   

    dim frm as form1
    定义一个变量,其类型是form1,并且frm不指向任何一个对象。dim frm as new form1
    新建一个form1对象,然后定义一个变量,其类型是form1,并且指向刚建立的对象
      

  2.   

    其实不一样,我现在主要问,为何我用
    dim frm as new form1
    定义的对象,无法用
    set frm=nothing的方法使用变成 nothing 状态。但是用
    dim frm as form1
    set frm=new from1
    却可以用 set frm=nothing的方法变成 nothing 状态。谢谢。
      

  3.   


    上一次,你已经问过了,我也回答了,回答不是太好。
    这次的问题,我的想法是:1. dim frm as new form1 '是编译器在栈里预先分配的一段内存来装载实例,你不能释放,只能end sub后自动清栈
    2. Dim frm As Form1  '由编译器在栈里预先分配定义一个dispatch指针
       Set frm = New Form1 '由用户在堆里动态地分配一块内存装载form1实例
       Set frm = Nothing    '由用户释放那一块内存,并且frm指向Null空指针
    不知对不对,我也不是很确定,如果是这样就好理解了。
      

  4.   

    我有点理解,但是不是太明白。
    好象
    dim frm as new form1
    是在栈中分配,而
    dim frm as form1
    则是在堆中分配的。 在堆中分配,当然可以灵活的创建是销毁,这个理解。
    但是在栈中分配是为何就无法销毁呢?是不是出了其作用域,就自动销毁呀?
    我的理解对吗?