Virtual Destructors is a general C++ thing and has nothing to do with Unreal Engine specifically.
However UObjects have their own garbage collection so by the time you reach the C++ Destructor it might be too late and you end up with dangling references.
You should probably override BeginDestroy instead if you need to clean things up manually before the Garbage Collector takes care of the rest.