Member
Beiträge: 7
| Hallo,
Ich habe eine Klasse 'Parent', die eine Kollektion aus 'Children'-Elementen, auch jeweils Klassen, enthält. Die Children haben eine Eigenschaft 'Parent' die das übergeordnete Objekt referenziert. Damit können Sie dem Parent über Änderungen informieren, was mit Ereignissen in diesem Fall (Kollektion) nicht möglich ist. Ich möchte wissen, wie ich das Parent-Objekt nach der Verwendung korrekt entsorge.
Wenn die Parent-Klasse ihre Aufgabe erledigt hat, entlade ich sie in der ursprünglichen Prozedur mit Set Nothing:
| Sub WorkWithParents
|
| Dim P As New Parent
| P.Marry
| P.MakeChild
| P.MakeAnotherChild
| Set P = Nothing
|
| End Sub
Dadurch wird automatisch die Terminate-Methode des Parent-Objekts aufgerufen, in der ich die Klassenobjekte zerstöre (ChildrenCol ist eine Vba.Collection):
| Private Sub Class_Terminate()
|
| Set ChildrenCol = Nothing
|
| End Sub
Reicht das? Werden dadurch sozusagen die Kinder automatisch elternlos oder bleibt etwas im Speicher zurück? Muss es zur vollständigen Entsorgung so (oder ähnlich) heißen:
| Private Sub Class_Terminate()
|
| Dim C As Children
|
| For Each C In Me.ChildrenCol
| Set C.Parent = Nothing 'Referenz auf Parent entfernen
| Set C = Nothing 'Objekt an sich löschen
| Ne|t
|
| Set ChildrenCol = Nothing
|
| End Sub
Oder checkt Vba von Haus aus die korrekte Entsorgung? In .net gibts ja eine automatisch Garbage-Collection, die nach meinem Verständnis genau das macht.
Vielen Dank für eure Antworten,
Georg
|