Quote Originally Posted by http://www.yolinux.com/TUTORIALS/C++MemoryCorruptionAndMemoryLeaks.html
Inheritance, polymorphism and the wrong delete:

BaseClass* obj_ptr = new DerivedClass; // Allowed due to polymorphism.
...
delete obj_ptr; // this will call the destructor ~Parent() and NOT ~Child()

If you are counting on the destructor to delete memory allocated in the constructor beware of this mistake as it will cause a memory leak. Use a virtual destructor to avoid this problem. The ~BaseClass() destructor is called and then the destructor ~DerivedClass() is chosen and called at run time because it is a virtual destructor. If it is not declared virtual then only the ~BaseClass() destructor is called leaving any allocated memory from the DerivedClass to persist and leak. This assumes that the DerivedClass has extra memory allocated above and beyond that of the BaseClass which must be freed.

The same ill effect can be achieved with a C style cast to a class of less scope which will dumb down the destructor to that which may not execute all the freeing of the original class. A C++ style dynamic cast may prevent this error as it will recognize the loss of translation and not allow the cast to take place resulting in a traceable crash rather a tough to find memory leak.
I'm thinking this might have something to do with it, but I don't entirely understand what they mean... I'm going to keep trying new things to see if I can get this to work, but as of now the prospect looks grim.