Ste*_*e06 9 oop excel vba class
说我有一个MyCollection对象的集合MyClass.
是否Set MyCollection = Nothing调用每个包含对象的析构函数,还是应该= Nothing单独设置每个对象?
我显然关心内存泄漏的原因.
Dim MyCollection As Collection
Set MyCollection = New Collection
... 'add objects of type MyClass here
Set MyCollection = Nothing
Run Code Online (Sandbox Code Playgroud)
销毁这个类会调用每个对象的析构函数吗?
Dic*_*ika 10
在销毁MyCollection时,所有MyClass对象都将被销毁,除非它们在其他地方被引用.
VBA在课堂上使用参考计数器.每当有一个对类的引用时它会加1,并在每次引用被销毁时向下滴答一个.只要MyCollection是某种东西并且在范围内,其中包含的每个MyClass引用计数器将至少为一个.如果引用计数器正好是一个,则销毁MyCollection会将每个元素的引用计数器打到零,并且它将被垃圾收集.
除非您明确将其设置为Nothing,否则sub中间的最后一个MyClass变量将引用MyClass的一个实例.一个类变量不太可能导致明显的内存问题.
Sub MakeClassColl()
Dim MyCollection As Collection
Dim i As Long
Dim clsMyClass As MyClass
Set MyCollection = New Collection
For i = 1 To 3
Set clsMyClass = New MyClass
MyCollection.Add clsMyClass
'Check1
Next i
Set MyCollection = Nothing
'Check2
End Sub
Run Code Online (Sandbox Code Playgroud)
检查1:
CHECK2:
| 归档时间: |
|
| 查看次数: |
7334 次 |
| 最近记录: |