Garbage Collection and destructors don't always agree. Because memory can be deleted at any time, there's no guarantee that destructors will be called "at the right time."
There's an alternative in C++, as well. Smart pointers. They usually do reference counting and delete objects when the reference count reaches 0. You can try that, as well. It means no need for freeing memory yourself and is similar (and better IMHO) than a garbage collector.