Ah, I see. I understand the problem.
I disagree that garbage collection makes them unnecessary, though, as there is more one might want to do than cleanup. For example, one might save state, or tell something else "Screw you guys, I'm leaving. Don't try to call me.".
But, garbage collection also makes it harder to do them at the right time. One does not want the destructor called when the object is actually garbage collected, one wants it called when the object becomes ready for garbage collection. Kind of like a "finally" for an object.
Well, well, I'll just add a Finalize() method and remember to call it for the objects in question.