Engine Subsystem Deinitialize

Hi .
This is actually a bug. The Deinitialize method *should *be called. The proper location would be UEngine::PreExit() and you will want to call EngineSubsystemCollection.Deinitialize().
Epic are working on a fix for a feature release.

In the meantime, if you don’t have access or don’t wish to change the engine code, you could try calling Deinitialize directly in the destructor of the subsystem, but only if your subsystem has nothing derived from it. Calling a virtual function in the destructor can be dangerous! Or you move your functionality into a non-virtual function, and call that from the subsystem destructor, and from deinitialize. Just remember to remove the destructor call once this issue is fixed in the engine. You can always checkf that the receiver hasn’t been deleted, and that’ll flag up as soon as the cleanup code is called twice (in case you forget about this in the meantime!).

Hope that helps
Malcolm