Counting references
Let’s take another look at the B-- implementation of CHardway. Our first look concentrated on QueryInterface. This time we’ll focus on AddRef and Release:
‘ CHardway (CLSID_CHardway)
Implements IID_IHardway ‘ Every class implements default interface
Implements IID_IUnknown ‘ Every interface implements IUnknown
‘ Any class can implement additional interfaces
§
’ Private variables
Private c As Long ‘ Internal reference count
Function IUnknown_QueryInterface(iid As GUID) As Object
§
Sub IUnknown_AddRef()
c = c + 1
End Sub
Sub IUnknown_Release()
c = c - 1
If c = 0 Then
RaiseEvent Me.Class_Terminate
Erase Me
End If
End Sub
’ The rest of the class
§
This code is speculative because there isn’t really a B-- to write it with. In particular, the Erase Me statement in Release is based on the speculation that the object was originally allocated with ReDim.