【转载】VB6 里面 dim x as class1/dim x as new class1的区别

后者不仅声明了,还实例化了该对象

 

DIM a AS 类1
   这只是定义一个类的变量,这种时候,这个变量其实相当与一个指针,而指针地址中的类并没有实例化,也可以理解为没有载入堆栈,只是一个空的地址指针。不过这个地址指针可以随意的设置成别的地址。
比如:
Dim a As 类1
Dim UU As New 类1
Set a = UU


dim a as new 类1
    这种方法其实可以拆开来看如:
Dim a As 类1
Set a = new 类1

Dim a As 类1  的意思我们知道了,是定义一个变脸,并且变量内容是指向一个类的指针,但因为这个类型没有实际的分配出内存并载入堆栈,所以这个时候这个变量是无用的,只是个指向空地址无用变量。
而 new 类1 就是将这个类创建一个新实例的过程,并将这个创建好的新实例地址赋值给 a 这个变量。也可以理解为在内存中划分了一块符合这个类所需要的内存区域,并将相关过程载入到该内存中,并将这个内存地址载入堆栈共CPU执行。而这块分配好的地址句柄便是这个类的实例句柄。也就是 a 这个类指针真正存储的东西。

当调用变量的属性、方法或事件时,其实就是CPU根据代码寄存器再内部跳转执行编译位置代码,每一个实例有一个独立的内存块,即使结构一直,但内容不同,这就是类和类实例化的关系。
在VB中理解,就是
Dim a As 类1       '是定义类变量
Set a = new 类1    '是初始化类变量(加上“实例”更为贴切)
Dim a As New 类1  '是定义类变量同时初始化类变量
因为类必须初始化,如果没有初始化的类是不能用的。
即使有些类或对象不是经由你的代码初始化,也是系统或别的程序帮你初始化了才能用,如 me、app、Form1...

至于类的释放,就是上面所说的
set a= nothing
在VB中,当这样设置类时,类中会产生 Terminate 事件,类里会释放一些有关资源,直至最后还会将为 a 变量分配的内存也释放掉。

转载于:https://www.cnblogs.com/argent/p/5415629.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值