UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
GCObject.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3/*=============================================================================
4 GCObject.h: Abstract base class to allow non-UObject objects reference
5 UObject instances with proper handling of them by the
6 Garbage Collector.
7=============================================================================*/
8
9#pragma once
10
11#include "CoreMinimal.h"
15#include "UObject/Object.h"
16#include "UObject/ObjectPtr.h"
17
18#include "GCObject.generated.h"
19
20class FGCObject;
21
27UCLASS(Transient, MinimalAPI)
29{
30 struct FImpl;
32
34 FGCObject* CurrentlySerializingObject = nullptr;
35
36 friend struct FReplaceReferenceHelper;
37
38public:
40
44
50 COREUOBJECT_API void AddObject(FGCObject* Object);
51
58
67 COREUOBJECT_API bool GetReferencerName(UObject* Object, FString& OutName, bool bOnlyIfAddingReferenced = false) const;
68
76 COREUOBJECT_API static void AddReferencedObjects(UObject* InThis, FReferenceCollector& Collector);
77
78 void AddInitialReferences(TArray<UObject**>& Out);
83 virtual void FinishDestroy() override;
84
88 FGCObject* GetCurrentlySerializingObject() const
89 {
90 return CurrentlySerializingObject;
91 }
92
93#if WITH_EDITORONLY_DATA
96
97private:
98
101
102public:
103
106 {
107 return OnGCObjectAdded;
108 }
109#endif // WITH_EDITORONLY_DATA
110};
111
112
128{
129public:
135
137 static COREUOBJECT_API void StaticInit();
138
144 {
146 }
147
149 {
151 }
152
157
158 enum class EFlags : uint32
159 {
160 None = 0,
161
163 RegisterLater = 1 << 0,
164
172 };
173 explicit FGCObject(EFlags Flags);
174
175 virtual ~FGCObject()
176 {
178 }
179
180 FGCObject& operator=(const FGCObject&) {return *this;}
181 FGCObject& operator=(FGCObject&&) {return *this;}
182
185
188
195 virtual void AddReferencedObjects( FReferenceCollector& Collector ) = 0;
196
198 virtual FString GetReferencerName() const = 0;
199
202 {
203 return false;
204 }
205
206private:
207 friend UGCObjectReferencer;
208 static COREUOBJECT_API const TCHAR* UnknownGCObjectName;
209
210 const bool bCanMakeInitialReferences = false;
211 bool bReferenceAdded = false;
212};
213
215
217: bCanMakeInitialReferences(EnumHasAllFlags(Flags, EFlags::AddStableNativeReferencesOnly))
218{
220 {
222 }
223}
224
225// Types derived from FGCObject are not trivially relocatable, so flag their use in containers and other contexts.
226template <UE::CDerivedFrom<FGCObject> T>
228{
229 static inline constexpr bool Value = false;
230};
FPlatformTypes::TCHAR TCHAR
Either ANSICHAR or WIDECHAR, depending on whether the platform supports wide characters or the requir...
Definition Platform.h:1135
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define DECLARE_TS_MULTICAST_DELEGATE_OneParam(DelegateName, Param1Type)
Definition DelegateCombinations.h:50
constexpr bool EnumHasAnyFlags(Enum Flags, Enum Contains)
Definition EnumClassFlags.h:35
constexpr bool EnumHasAllFlags(Enum Flags, Enum Contains)
Definition EnumClassFlags.h:28
#define ENUM_CLASS_FLAGS(Enum)
Definition EnumClassFlags.h:6
#define GENERATED_BODY(...)
Definition ObjectMacros.h:765
#define UCLASS(...)
Definition ObjectMacros.h:776
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition GCObject.h:128
virtual void AddReferencedObjects(FReferenceCollector &Collector)=0
EFlags
Definition GCObject.h:159
static COREUOBJECT_API void StaticInit()
Definition GCObjectReferencer.cpp:279
virtual bool GetReferencerPropertyName(UObject *Object, FString &OutPropertyName) const
Definition GCObject.h:201
FGCObject & operator=(FGCObject &&)
Definition GCObject.h:181
COREUOBJECT_API void RegisterGCObject()
Definition GCObjectReferencer.cpp:288
static COREUOBJECT_API UGCObjectReferencer * GGCObjectReferencer
Definition GCObject.h:134
virtual ~FGCObject()
Definition GCObject.h:175
COREUOBJECT_API void UnregisterGCObject()
Definition GCObjectReferencer.cpp:301
FGCObject & operator=(const FGCObject &)
Definition GCObject.h:180
FGCObject()
Definition GCObject.h:143
virtual FString GetReferencerName() const =0
FGCObject(const FGCObject &Other)
Definition GCObject.h:148
FGCObject(FGCObject &&Other)
Definition GCObject.h:153
Definition UObjectGlobals.h:1292
Definition UObjectGlobals.h:2492
Definition ObjectMacros.h:180
Definition Array.h:670
Definition UniquePtr.h:107
Definition GCObject.h:29
Definition Object.h:95
Definition ExpressionParserTypes.h:21
@ false
Definition radaudio_common.h:23
Definition IsTriviallyRelocatable.h:17
static constexpr bool Value
Definition IsTriviallyRelocatable.h:27
Definition GCObjectReferencer.cpp:32