Blueprint child class executes constructor using c++ default values instead of Blueprint default values

Essentially, even though I change the default value on the BP class, the constructor still runs using the c++ parent class values.

Reproduction steps:

Create a new c++ actor class ‘MyActor’

Add propertt to MyActor header;

UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Material")
UMaterialInterface* Material;

Add null check to c++ constructor

if (Material == nullptr)
{
UE_LOG(LogTemp, Warning, TEXT(“Material null in constructor”));
}

Create BP child class in editor

Set value of Material on BP child class to any valid material and place BP child class in level

Check logs, null warning will still fire

This is not a bug but natural limitation of the system which can’t be really fixed because C++ constructor naturaly (by C++ standards, C++ compiler set up the code this way) executes first before UE4 property management can do anything to it. There special event if you want to do something right after properties are initiated and applied and do some code that relies on those property changes PostInitProperties: