As we saw last time,
trying to do too much in one's destructor can lead to an object
being destroyed twice.
The standard way to work around this problem is to set an artificial
reference count during destruction.
class MyObject : public IUnknown
LONG cRef = InterlockedDecrement(&m_cRef);
if (cRef == 0...