ShouldCreateSubsystem and the subsystem class hierarchy
The subsystem collection asks each non-abstract class's CDO whether to create an instance. A subclass does not automatically replace its parent; both can exist side by side. This explains how to move the implementation into Blueprint, how to keep a C++ fallback when the child is missing, and why GetSubsystem<T>() can still find the derived instance.