Ich kann hier nur aus C++ Sicht sprechen. Keine Initialisierung heißt NICHT dass spieler mit NULL initialisiert wird, sondern auf einen zufälligen Speicherbreich - was zu einem Fehler führen kann, aber nicht muss.
Warum dein Code nicht crasht, weiß ich nicht. Evtl. erstellt 3DGS hier selber was, wodurch der pointer valid ist.
Aber nochmal: Nimm eine der Varianten oben. Es MUSS doch vom logischen her crashen. Panel wird vor Entity erschaffen. Panel versucht auf Entity zuzugreifen -> Crash.