【发布时间】:2017-02-01 21:23:57
【问题描述】:
我还没有找到特定于这个问题的答案,所以希望有人可以为我解决这个问题。
我了解 VBA 垃圾收集器使用引用计数来确定是否不再需要某个对象,并显式解除您使用的变量的关联(从而减少引用计数):
Set objectVariable = Nothing
这是我现在正在处理的电子表格中的内容:
Declare Function GetObject Lib "ObjectCreator.dll" () As Object
Public MyObject as Object
Sub MyMethod()
Set MyObject = GetObject()
...do stuff with MyObject...
Set MyObject = GetObject()
...do stuff with my new MyObject...
Set MyObject = GetObject()
...do stuff with my even newer MyObject...
Set MyObject = Nothing
End Sub
我的问题是:创建的所有三个对象都会被 GC 销毁还是只销毁最后一个?即当一个对象的引用变量设置为另一个对象而不是设置为Nothing时,它的引用计数是否会减少?
【问题讨论】:
-
如果你真的有一个有
GetObject方法的dll,你应该在声明语句中给它起别名,这样它就不会隐藏VBA的GetObject函数。 -
@Comintern:啊,也许我应该使用不同的名称...不,DLL 没有 GetObject 方法,只是一个返回对象的方法。我使用该名称只是为了使示例简单。
标签: vba excel object garbage-collection