I think you should add such an assert in the Thread’s destructor:
// If the thread is still running while the base class destructor is called, this probably mean that the run method is still using members of the deleted child class.
// So don't do that, call stopThread in your own destructor.
jassert(!isThreadRunning());