// Copyright 2020-2024 CesiumGS, Inc. and Contributors #pragma once #include "Components/SceneComponent.h" #include "Containers/Array.h" #include "Tickable.h" #include "UObject/WeakObjectPtrTemplates.h" class UObject; class UTexture; class AmortizedDestructor : FTickableGameObject { public: void Tick(float DeltaTime) override; ETickableTickType GetTickableTickType() const override; bool IsTickableWhenPaused() const override; bool IsTickableInEditor() const override; TStatId GetStatId() const; void destroy(UObject* pObject); private: bool runDestruction(UObject* pObject) const; void addToPending(UObject* pObject); void processPending(); void finalizeDestroy(UObject* pObject) const; TArray> _pending; TArray> _nextPending; }; class CesiumLifetime { public: static void destroy(UObject* pObject); static void destroyComponentRecursively(USceneComponent* pComponent); private: static AmortizedDestructor amortizedDestructor; };