Note that if you explicitly call the destructor, and that frees memory, then you must make sure any pointers are set to zero so that when the destructor is called by delete the memory is not double freed. Double free can lead to undefined behaviour.

Best not to call destructors explicitly, really. I still haven't seen a good answer to why you would want to do that.