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.
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.
There's no existing public thread on this issue, so head over to Questions & Answers just mention UE-355998 in the post.
| 0 |
| Component | UE - Framework - Blueprint |
|---|---|
| Affects Versions | 5.5, 5.6, 5.7 |
| Target Fix | 5.8 |
| Created | Nov 28, 2025 |
|---|---|
| Updated | Feb 26, 2026 |