Why are destroyed actors in the scene outliner?

Hi. I have a reproduction case for this issue, and I’ve made a small project to demonstrate it. It was affecting a different project I was working on quite badly, with thousands of “(Deleted Actor)” entries in the list and causing huge stalls every few frames.

This is a link to the project, for 4.5.1 (also works in 4.6.0 preview): http://expiredpopsicle.com/tmp/LeakTest.zip

There are two blueprints and a level blueprint.

First, there is a Projectile actor that has this code:

It has a single static mesh component, with a starter content Shape_Sphere mesh, collision disabled (“NoCollision”), and “Generate Overlap Events” disabled. It has a lifespan set to 1 second, but I have also tried using Begin Play → Delay (1 second) → Destroy (Self). Same behavior on both methods.

There is a Shooter actor that has this code:

It has a single static mesh component, which is set to the starter content Shape_Cube. It also has collision disabled and “Generate Overlap Events” disabled. In addition to the code shown, I have also tried spawning with a looping timeline. In the other project that was also exhibiting the issue, things were getting spawned in C++ code. All of these exhibited the same behavior.

The level I set up has 30 instances of the Shooter objects arranged in rows of five.

With this setup, playing in the editor and waiting for a few seconds (about 10?), the Scene Outliner will begin to fill up with “(Deleted Actor)” instances. In the column field it says “Edit Projectile” for roughly half of them.

To demonstrate that these objects are staying in the list, even long after the spawning has stopped, I added a trigger volume in the level, and hooked it up to this in the level blueprint:

With this, we can see that the objects stay in the list forever, even after all the actors are gone.