As long as you manage to leave the scope in which the object was created with no problems, then the destructor is called. When you write a program, you should always count on it being called. You were right at the beginning of your post (not about the skeletons... noob) where you said all he has to do is check to see if the pointer isn't null in the destructor. That's what Mario was getting at.
Not sure if this is the cause of the problem, but destructors tend to look like ~abc(), not just ~abc. mikahell, maybe it'd be a good first step to see whether your destructor is being called at all?