105 : ObjectPtr(Instance)
107 LK_DEBUG_PTR_LOG(
"Copy Constructor (T* Instance = nullptr)");
108 static_assert(std::is_base_of<LObject, T>::value,
"TObject is only usable on objects that derive from LObject");
111 TObjectPtr_IncrementReferenceCount();
118 LK_DEBUG_PTR_LOG(
"Copy(T&)");
121 TObjectPtr_IncrementReferenceCount();
126 : ObjectPtr(
const_cast<std::remove_const_t<T>*
>(&Object))
128 LK_DEBUG_PTR_LOG(
"Copy(const T&)");
131 TObjectPtr_IncrementReferenceCount();
136 : ObjectPtr(Other.ObjectPtr)
138 LK_DEBUG_PTR_LOG(
"Copy(TObjectPtr<T>&)");
141 TObjectPtr_IncrementReferenceCount();
147 : ObjectPtr((T*)Other.ObjectPtr)
149 LK_DEBUG_PTR_LOG(
"Copy(const TObjectPtr<R>&)");
152 TObjectPtr_IncrementReferenceCount();
157 : ObjectPtr(Other.ObjectPtr)
159 LK_DEBUG_PTR_LOG(
"Move(TObjectPtr<T>&&)");
160 Other.ObjectPtr =
nullptr;
165 : ObjectPtr((T*)Other.ObjectPtr)
167 LK_DEBUG_PTR_LOG(
"Move(TObjectPtr<R>&&)");
168 Other.ObjectPtr =
nullptr;
173 LK_DEBUG_PTR_LOG(
"Destructor");
176 TObjectPtr_DecrementReferenceCount();
182 LK_DEBUG_PTR_LOG(
"&operator=(std::nullptr_t)");
185 TObjectPtr_DecrementReferenceCount();
194 LK_DEBUG_PTR_LOG(
"&operator=(const TObjectPtr<T>&)");
202 Other.TObjectPtr_IncrementReferenceCount();
206 TObjectPtr_DecrementReferenceCount();
209 ObjectPtr = Other.ObjectPtr;
217 LK_DEBUG_PTR_LOG(
"&operator=(const TObjectPtr<R>&)");
220 Other.TObjectPtr_IncrementReferenceCount();
224 TObjectPtr_DecrementReferenceCount();
227 ObjectPtr = Other.ObjectPtr;
235 LK_DEBUG_PTR_LOG(
"&operator=(TObjectPtr<R>&&)");
238 TObjectPtr_DecrementReferenceCount();
241 ObjectPtr = Other.ObjectPtr;
242 Other.ObjectPtr =
nullptr;
247 FORCEINLINE
operator bool() {
return ObjectPtr !=
nullptr; }
248 FORCEINLINE
operator bool()
const {
return ObjectPtr !=
nullptr; }
250 FORCEINLINE
bool operator==(std::nullptr_t)
const {
return (ObjectPtr ==
nullptr); }
251 FORCEINLINE
bool operator==(
const T* Other)
const {
return (Get() == Other); }
253 FORCEINLINE T* operator->()
255 LK_PTR_ASSERT(ObjectPtr,
"TObjectPtr::operator-> failed, ObjectPtr is nullptr");
259 FORCEINLINE
const T* operator->()
const
261 LK_PTR_ASSERT(ObjectPtr,
"TObjectPtr::operator-> failed, ObjectPtr is nullptr");
265 FORCEINLINE T& operator*()
267 LK_PTR_ASSERT(ObjectPtr,
"TObjectPtr::operator* failed, ObjectPtr is nullptr");
271 FORCEINLINE
const T& operator*()
const
273 LK_PTR_ASSERT(ObjectPtr,
"TObjectPtr::operator* failed, ObjectPtr is nullptr");
279 LK_PTR_ASSERT(ObjectPtr,
"TObjectPtr::Get failed, ObjectPtr is nullptr");
280 return static_cast<T*
>(ObjectPtr);
283 FORCEINLINE
const T* Get()
const
285 LK_PTR_ASSERT(ObjectPtr,
"TObjectPtr::Get failed, ObjectPtr is nullptr");
286 return static_cast<T*
>(ObjectPtr);
292 static_assert(std::disjunction_v<std::is_base_of<T, R>, std::is_base_of<R, T>>,
"Cannot cast TObjectPtr to that type");
296 FORCEINLINE
void Reset(T* ObjectRef =
nullptr)
298 TObjectPtr_DecrementReferenceCount();
299 ObjectPtr = ObjectRef;
302 FORCEINLINE
void Release()
304 TObjectPtr_DecrementReferenceCount();
312 template<
typename ...TArgs>
317 if ((ObjectPtr ==
nullptr) || (Other.ObjectPtr ==
nullptr))
322 return (*ObjectPtr == *Other.ObjectPtr);
329 FORCEINLINE
void TObjectPtr_IncrementReferenceCount()
const
331 LK_PTR_ASSERT(ObjectPtr,
"IncrementReferenceCount failed, invalid ObjectPtr");
332 ((LObject*)ObjectPtr)->IncrementReferenceCount();
339 FORCEINLINE
void TObjectPtr_DecrementReferenceCount()
const
341 ((LObject*)ObjectPtr)->DecrementReferenceCount();
343 if (((LObject*)ObjectPtr)->GetReferenceCount() == 0)
353 mutable T* ObjectPtr;
356 friend class TObjectPtr;
int GetLiveObjects(std::vector< TObjectPtr< LObject > > &ObjectArray, const bool FilterByStaticClass=true)
Populare a vector with live objects.
Definition ObjectPtr.cpp:66