Nested OLE Objects Are Destroyed When Parents Are Destroyed (129837)



The information in this article applies to:

  • Microsoft Visual Basic Standard Edition, 32-bit, for Windows 4.0
  • Microsoft Visual Basic Professional Edition, 16-bit, for Windows 4.0
  • Microsoft Visual Basic Professional Edition, 32-bit, for Windows 4.0
  • Microsoft Visual Basic Enterprise Edition, 16-bit, for Windows 4.0
  • Microsoft Visual Basic Enterprise Edition, 32-bit, for Windows 4.0

This article was previously published under Q129837

SUMMARY

When you have OLE objects that create OLE objects, these nested objects are destroyed (set equal to Nothing) when the parent object that created them is destroyed.

MORE INFORMATION

Visual Basic releases all second-level objects (objects created by objects) when the top level class is destroyed. This is essentially the same behavior as an object variable going out of scope.

For example, assume the following object hierarchy:

Two classes:
   Class CTopLevel
   Class CSecondLevel
				
Class CTopLevel has the object members.
   Public ChildObject As CSecondLevel
   Public ParentString As String
				
Class CSecondLevel has the object member.
   Public ChildString As String
				
In the Initialize event of CTopLevel, you set the ChildObject:
   Private Sub CTopLevel_Initialize ()
      Set ChildObject = New CSecondLevel
      ChildObject.ChildString = "I'm a child object."
   End Sub
				
If the CTopLevel class is created and goes out of scope after the End Sub in the following code:
   Private Sub Form_Click ()
      Dim ParentObject As New CTopLevel
      ParentObject.ParentString = "I'm a parent object."
   End Sub
				
a CSecondLevel object (ChildObject) is explicitly instantiated in the CTopLevel_Initialize event, but implicitly destroyed when ParentObject goes out of scope at the end of the Form_Click Sub procedure.

For objects that have not been destroyed when a Visual Basic application shuts down, Visual Basic does a two-pass cleanup on outstanding objects. Pass one releases all module level and static object references (classes and objects). Pass two releases the objects themselves. This allows parent and child objects to both shut down even though they may have module-level references to each other. Essentially, Visual Basic cleans up after itself very well.

Modification Type:MajorLast Reviewed:12/9/2003
Keywords:KB129837