Proper Game Singleton

I have a working GameSingleton, but it’s not very ‘userfriendly’.

Why do I need the following 2 lines (got that from the official documentation):

if (!_Instance) { return NULL; }
if (!_Instance->IsValidLowLevel()) { return NULL; }

And why do I have to write this in the constructor of any class that needs something from the GameSingleton. Is there no way to get around the GEngine (which is null while you are in the editor without a running game):

 #if WITH_EDITOR
 if (GAMESINGLETON)
 {
 #endif
 FString f = GAMESINGLETON->Test;
 // <do something with the f value, like print it to the screen or something here>
 #if WITH_EDITOR
 }
 #endif

Full code:

#include "Object.h"
#include "GameSingleton.generated.h"

UCLASS(Blueprintable, BlueprintType)
class SPACE_API UGameSingleton : public UObject
{
	GENERATED_BODY()
	
public:

	UGameSingleton();

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Game Singleton")
	FString Test = TEXT("This is the singleton! It works!");

	UFUNCTION(BlueprintPure, Category = "Game Singleton")
	static UGameSingleton* Instance();
};

//////////////// cpp file below

// Do NOT place this line in the header, the linker will not like it.
static UGameSingleton* _Instance;

UGameSingleton::UGameSingleton() { }

UGameSingleton* UGameSingleton::Instance()
{
	if (_Instance != nullptr) { return _Instance; }

	if (GEngine)
	{
		_Instance = Cast<UGameSingleton>(GEngine->GameSingleton);
		if (!_Instance) { return NULL; }
		if (!_Instance->IsValidLowLevel()) { return NULL; }
		return _Instance;
	}
	else
	{
		return NULL;
	}
}


// in project header
#define GAMESINGLETON UGameSingleton::Instance()