Краткий ответ - да. В приведенном ниже примере, который очень похож на ваш, за исключением того, что он показывает один конкретный способ создания экземпляров MyClass, все отдельные экземпляры MyClass будут уничтожены сразу после уничтожения коллекции:
Dim MyCollection As Collection
Set MyCollection = New Collection
Call MyCollection.Add(New MyClass)
Call MyCollection.Add(New MyClass)
Call MyCollection.Add(New MyClass)
Set MyCollection = Nothing
Чем дольше ответ, тем больше. Ответ - «да», если единственная ссылка на содержащиеся объекты - это та, что содержится в коллекции, как в вашем простом примере. VBA будет знать, что на все ваши экземпляры MyClass больше нет ссылок, и уничтожит их. (Это приведет к вызову метода Class_Terminate
каждого экземпляра объекта.)
Но вы должны быть осторожны, если вы делали другие ссылки на эти объекты. В заявлении Set MyCollection = Nothing
нет ничего волшебного. Это тот факт, что это приводит к тому, что VBA уничтожает коллекцию, что, в свою очередь, приводит к уничтожению объекта внутри. (И, конечно, коллекция уничтожается этой строкой, только если MyCollection ссылается на единственную ссылку на нее.)
Хороший источник, чтобы узнать больше о том, как время жизни объектов VBA - это старое Руководство программиста Visual Basic 6.0, в частности, раздел «Ссылки на объекты и подсчет ссылок»:
http://msdn.microsoft.com/en-us/library/aa263495(v=VS.60).aspx