How to create widget in C++ without passing in OwningObjec?

Lately I’ve been working on a C++ project, today I met a problem about CreateWidget.
The problem is that I can’t leave the OwingObject to be nullptr when trying to create widget like below,

HitMark = CreateWidget<UFPHitMark, APlayerController>(nullptr, HitMarkClass);

I went to see the source code of this CreateWidget function, I find that it just return nullptr if OwingObject is nullptr

template <typename WidgetT = UUserWidget, typename OwnerT = UObject>
WidgetT* CreateWidget(OwnerT* OwningObject, TSubclassOf<UUserWidget> UserWidgetClass = WidgetT::StaticClass(), FName WidgetName = NAME_None)
{
	static_assert(TIsDerivedFrom<WidgetT, UUserWidget>::IsDerived, "CreateWidget can only be used to create UserWidget instances. If creating a UWidget, use WidgetTree::ConstructWidget.");
	
	static_assert(TIsDerivedFrom<OwnerT, UWidget>::IsDerived
		|| TIsDerivedFrom<OwnerT, UWidgetTree>::IsDerived
		|| TIsDerivedFrom<OwnerT, APlayerController>::IsDerived
		|| TIsDerivedFrom<OwnerT, UGameInstance>::IsDerived
		|| TIsDerivedFrom<OwnerT, UWorld>::IsDerived, "The given OwningObject is not of a supported type for use with CreateWidget.");

	SCOPE_CYCLE_COUNTER(STAT_CreateWidget);

	if (OwningObject)
	{
		return Cast<WidgetT>(UUserWidget::CreateWidgetInstance(*OwningObject, UserWidgetClass, WidgetName));
	}
	return nullptr;
}

However, in the Blueprint, if I use CreateWidget node, the OwningPlayer can be left nullptr. I want to know is there any way to create a widget in C++ without passing in OwningObject?

OwningPlayer in the blueprint CreateWidget cannot be null either. It defaults to the PlayerController.

You cannot have a widget without an owning object, as it doesn’t make sense to. The widget needs an owner so someone can actually see the widget.