Description

Blueprints can enter a corrupted state where Actors construct DefaultSubobjects using CreateOptionalDefaultSubobject, even though child classes call DoNotCreateDefaultSubobject.

In some situations, Blueprints can still spawn a DefaultSubobject even when child classes are correctly calling DoNotCreateDefaultSubobject. It appears the cause of this issue is in BlueprintCompilationManagerImpl::ReinstanceBatch. The class still stores the old CDO and copies values from it, rather than from the new class that should not have the component registered. The new CDO indeed does not contain the component, but the old CDO still holds a valid reference to it. This value is then transferred to the new CDO, causing the Blueprint to end up with a component it should no longer have.

Steps to Reproduce

1- Create a new C++ Actor class with an optional component (using CreateOptionalDefaultSubobject).

2- Create a C++ child class from the previously created one, and then create a Blueprint that inherits from the child class. You should see the component in the Components hierarchy.

3- Close Unreal, and in the child C++ class, call DoNotCreateDefaultSubobject with the parent component’s name.

4- Compile and open the Blueprint.
If the Blueprint has entered the corrupted state, it will still spawn the component.

Have Comments or More Details?

There's no existing public thread on this issue, so head over to Questions & Answers just mention UE-355998 in the post.

0
Login to Vote

Unresolved
ComponentUE - Framework - Blueprint
Affects Versions5.55.65.7
Target Fix5.8
CreatedNov 28, 2025
UpdatedFeb 26, 2026
View Jira Issue