14#include "CoreMinimal.h"
25 template <CSharedOrWeak T>
29 template <CSharedOrWeak T>
33 template <CSharedOrWeak T>
45 template <
typename T,
typename... Args>
48 object.Initialize(Forward<Args>(args)...);
62 template <
typename T, ESPMode Mode = ESPMode::ThreadSafe,
typename... Args>
66 TSharedRef<T, Mode> result = MakeShareable(newObject);
67 result->Initialize(Forward<Args>(args)...);
93 CFunctorObject Initializer,
95 ESPMode Mode = ESPMode::ThreadSafe,
97 typename Result = std::decay_t<ResultArg>
99 requires std::is_lvalue_reference_v<ResultArg>
103 return MakeShareable(
104 ConstructNew(Forward<Initializer>(init), Forward<Args>(args)...)
114 template <CRefCounted T, ESPMode Mode = ESPMode::ThreadSafe>
119 return MakeShareable(
object, [](T*
object) {
object->Release(); });
131 ESPMode Mode =
decltype(DeclVal<T const>().AsShared())::Mode
133 auto WeakSelf(
const T* self) -> TWeakPtr<T const, Mode>
135 return StaticCastSharedRef<T const>(self->AsShared());
133 auto WeakSelf(
const T* self) -> TWeakPtr<T const, Mode> {
…}
147 ESPMode Mode =
decltype(DeclVal<T>().AsShared())::Mode
151 return StaticCastSharedRef<T>(self->AsShared());
168 template <CDefaultInitializable T>
174 template <CDefaultInitializable T>
177 template <CDefaultInitializable T>
180 template <CDefaultInitializable T>
186 return MakeShared<TSharedStorage<FDelegateHandle>>();
Concept describing an object which provides a deferred initializer for shared objects.
typename TFunctionTraits< std::decay_t< T > >::template Arg< I > TFunction_Arg
Shorthand for getting a type of a function argument at given position I.
Utilities for TSharedPtr/Ref and related.
TSharedRef< T, Mode > MakeShareableInit(T *newObject, Args &&... args)
A wrapper around MakeShareable that automatically calls an initializer method Initialize on the insta...
TSharedRef< typename T::ElementType, T::Mode > TSharedRefFrom
Copy thread-safety from other shared object type.
TSharedPtr< typename T::ElementType, T::Mode > TSharedPtrFrom
Copy thread-safety from other shared object type.
TSharedRef< TSharedStorage< T > > TSharedStorageRef
TWeakPtr< typename T::ElementType, T::Mode > TWeakPtrFrom
Copy thread-safety from other shared object type.
FORCEINLINE TSharedStorageRef< FDelegateHandle > MakeSharedDelegateHandle()
A simple convenience wrapper around making FDelegateHandles shared.
TSharedRef< T, Mode > ShareRefCounted(T *object)
Create a shared pointer which takes in an object with in-place refcounting.
auto WeakSelf(const T *self) -> TWeakPtr< T const, Mode >
Same as SharedThis(this) in TSharedFromThis but returning a weak pointer instead.
TWeakPtr< TSharedStorage< T > > TSharedStorageWeakPtr
TSharedRef< Result, Mode > ConstructShared(Initializer &&init, Args &&... args)
A combination of MakeShareable and Mcro::Construct::ConstructNew.
TSharedPtr< TSharedStorage< T > > TSharedStoragePtr
A simple mutable shared storage of any value.