Ark Server API (ASA) - Wiki
Loading...
Searching...
No Matches
SharedPointer.h File Reference
+ Include dependency graph for SharedPointer.h:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

class  TSharedRef< ObjectType, InMode >
 
struct  FMakeReferenceTo< T >
 
struct  FMakeReferenceTo< void >
 
struct  FMakeReferenceTo< const void >
 
class  TSharedPtr< ObjectType, InMode >
 
struct  TIsZeroConstructType< TSharedPtr< ObjectType, Mode > >
 
class  TWeakPtr< ObjectType, InMode >
 
struct  TIsWeakPointerType< TWeakPtr< T, Mode > >
 
struct  TIsZeroConstructType< TWeakPtr< T, Mode > >
 
class  TSharedFromThis< ObjectType, Mode >
 

Namespaces

namespace  UE
 
namespace  UE::Core
 
namespace  UE::Core::Private
 
namespace  Freeze
 

Macros

#define UE_TSHAREDPTR_STATIC_ASSERT_VALID_MODE(ObjectType, Mode)
 

Functions

template<class CastToType , class CastFromType , ESPMode Mode>
FORCEINLINE TSharedRef< CastToType, Mode > StaticCastSharedRef (TSharedRef< CastFromType, Mode > const &InSharedRef)
 
template<typename ObjectType , ESPMode Mode>
FORCEINLINE TSharedRef< ObjectType, Mode > UE::Core::Private::MakeSharedRef (ObjectType *InObject, SharedPointerInternals::TReferenceControllerBase< Mode > *InSharedReferenceCount)
 
template<class ObjectType , ESPMode Mode>
void Freeze::IntrinsicWriteMemoryImage (FMemoryImageWriter &Writer, const TSharedPtr< ObjectType, Mode > &Object, const FTypeLayoutDesc &)
 
 DECLARE_TEMPLATE_INTRINSIC_TYPE_LAYOUT ((template< class ObjectType, ESPMode Mode >),(TSharedPtr< ObjectType, Mode >))
 
template<typename T >
constexpr bool UE::Core::Private::IsDerivedFromSharedFromThisImpl (const TSharedFromThis< T > *)
 
constexpr bool UE::Core::Private::IsDerivedFromSharedFromThisImpl (...)
 
template<typename T >
constexpr bool IsDerivedFromSharedFromThis ()
 
template<class ObjectTypeA , class ObjectTypeB , ESPMode Mode>
FORCEINLINE bool operator== (TSharedRef< ObjectTypeA, Mode > const &InSharedRefA, TSharedRef< ObjectTypeB, Mode > const &InSharedRefB)
 
template<class ObjectTypeA , class ObjectTypeB , ESPMode Mode>
FORCEINLINE bool operator!= (TSharedRef< ObjectTypeA, Mode > const &InSharedRefA, TSharedRef< ObjectTypeB, Mode > const &InSharedRefB)
 
template<class ObjectTypeA , class ObjectTypeB , ESPMode Mode>
FORCEINLINE bool operator== (TSharedPtr< ObjectTypeA, Mode > const &InSharedPtrA, TSharedPtr< ObjectTypeB, Mode > const &InSharedPtrB)
 
template<class ObjectTypeA , ESPMode Mode>
FORCEINLINE bool operator== (TSharedPtr< ObjectTypeA, Mode > const &InSharedPtrA, TYPE_OF_NULLPTR)
 
template<class ObjectTypeB , ESPMode Mode>
FORCEINLINE bool operator== (TYPE_OF_NULLPTR, TSharedPtr< ObjectTypeB, Mode > const &InSharedPtrB)
 
template<class ObjectTypeA , class ObjectTypeB , ESPMode Mode>
FORCEINLINE bool operator!= (TSharedPtr< ObjectTypeA, Mode > const &InSharedPtrA, TSharedPtr< ObjectTypeB, Mode > const &InSharedPtrB)
 
template<class ObjectTypeA , ESPMode Mode>
FORCEINLINE bool operator!= (TSharedPtr< ObjectTypeA, Mode > const &InSharedPtrA, TYPE_OF_NULLPTR)
 
template<class ObjectTypeB , ESPMode Mode>
FORCEINLINE bool operator!= (TYPE_OF_NULLPTR, TSharedPtr< ObjectTypeB, Mode > const &InSharedPtrB)
 
template<class ObjectTypeA , class ObjectTypeB , ESPMode Mode>
FORCEINLINE bool operator== (TSharedRef< ObjectTypeA, Mode > const &InSharedRef, TSharedPtr< ObjectTypeB, Mode > const &InSharedPtr)
 
template<class ObjectTypeA , class ObjectTypeB , ESPMode Mode>
FORCEINLINE bool operator!= (TSharedRef< ObjectTypeA, Mode > const &InSharedRef, TSharedPtr< ObjectTypeB, Mode > const &InSharedPtr)
 
template<class ObjectTypeA , class ObjectTypeB , ESPMode Mode>
FORCEINLINE bool operator== (TSharedPtr< ObjectTypeB, Mode > const &InSharedPtr, TSharedRef< ObjectTypeA, Mode > const &InSharedRef)
 
template<class ObjectTypeA , class ObjectTypeB , ESPMode Mode>
FORCEINLINE bool operator!= (TSharedPtr< ObjectTypeB, Mode > const &InSharedPtr, TSharedRef< ObjectTypeA, Mode > const &InSharedRef)
 
template<class ObjectTypeA , class ObjectTypeB , ESPMode Mode>
FORCEINLINE bool operator== (TWeakPtr< ObjectTypeA, Mode > const &InWeakPtrA, TWeakPtr< ObjectTypeB, Mode > const &InWeakPtrB)
 
template<class ObjectTypeA , class ObjectTypeB , ESPMode Mode>
FORCEINLINE bool operator== (TWeakPtr< ObjectTypeA, Mode > const &InWeakPtrA, TSharedRef< ObjectTypeB, Mode > const &InSharedRefB)
 
template<class ObjectTypeA , class ObjectTypeB , ESPMode Mode>
FORCEINLINE bool operator== (TWeakPtr< ObjectTypeA, Mode > const &InWeakPtrA, TSharedPtr< ObjectTypeB, Mode > const &InSharedPtrB)
 
template<class ObjectTypeA , class ObjectTypeB , ESPMode Mode>
FORCEINLINE bool operator== (TSharedRef< ObjectTypeA, Mode > const &InSharedRefA, TWeakPtr< ObjectTypeB, Mode > const &InWeakPtrB)
 
template<class ObjectTypeA , class ObjectTypeB , ESPMode Mode>
FORCEINLINE bool operator== (TSharedPtr< ObjectTypeA, Mode > const &InSharedPtrA, TWeakPtr< ObjectTypeB, Mode > const &InWeakPtrB)
 
template<class ObjectTypeA , ESPMode Mode>
FORCEINLINE bool operator== (TWeakPtr< ObjectTypeA, Mode > const &InWeakPtrA, TYPE_OF_NULLPTR)
 
template<class ObjectTypeB , ESPMode Mode>
FORCEINLINE bool operator== (TYPE_OF_NULLPTR, TWeakPtr< ObjectTypeB, Mode > const &InWeakPtrB)
 
template<class ObjectTypeA , class ObjectTypeB , ESPMode Mode>
FORCEINLINE bool operator!= (TWeakPtr< ObjectTypeA, Mode > const &InWeakPtrA, TWeakPtr< ObjectTypeB, Mode > const &InWeakPtrB)
 
template<class ObjectTypeA , class ObjectTypeB , ESPMode Mode>
FORCEINLINE bool operator!= (TWeakPtr< ObjectTypeA, Mode > const &InWeakPtrA, TSharedRef< ObjectTypeB, Mode > const &InSharedRefB)
 
template<class ObjectTypeA , class ObjectTypeB , ESPMode Mode>
FORCEINLINE bool operator!= (TWeakPtr< ObjectTypeA, Mode > const &InWeakPtrA, TSharedPtr< ObjectTypeB, Mode > const &InSharedPtrB)
 
template<class ObjectTypeA , class ObjectTypeB , ESPMode Mode>
FORCEINLINE bool operator!= (TSharedRef< ObjectTypeA, Mode > const &InSharedRefA, TWeakPtr< ObjectTypeB, Mode > const &InWeakPtrB)
 
template<class ObjectTypeA , class ObjectTypeB , ESPMode Mode>
FORCEINLINE bool operator!= (TSharedPtr< ObjectTypeA, Mode > const &InSharedPtrA, TWeakPtr< ObjectTypeB, Mode > const &InWeakPtrB)
 
template<class ObjectTypeA , ESPMode Mode>
FORCEINLINE bool operator!= (TWeakPtr< ObjectTypeA, Mode > const &InWeakPtrA, TYPE_OF_NULLPTR)
 
template<class ObjectTypeB , ESPMode Mode>
FORCEINLINE bool operator!= (TYPE_OF_NULLPTR, TWeakPtr< ObjectTypeB, Mode > const &InWeakPtrB)
 
template<class CastToType , class CastFromType , ESPMode Mode>
FORCEINLINE TSharedPtr< CastToType, Mode > StaticCastSharedPtr (TSharedPtr< CastFromType, Mode > const &InSharedPtr)
 
template<class CastToType , class CastFromType , ESPMode Mode>
FORCEINLINE TWeakPtr< CastToType, Mode > StaticCastWeakPtr (TWeakPtr< CastFromType, Mode > const &InWeakPtr)
 
template<class CastToType , class CastFromType , ESPMode Mode>
FORCEINLINE TSharedRef< CastToType, Mode > ConstCastSharedRef (TSharedRef< CastFromType, Mode > const &InSharedRef)
 
template<class CastToType , class CastFromType , ESPMode Mode>
FORCEINLINE TSharedPtr< CastToType, Mode > ConstCastSharedPtr (TSharedPtr< CastFromType, Mode > const &InSharedPtr)
 
template<class CastToType , class CastFromType , ESPMode Mode>
FORCEINLINE TWeakPtr< CastToType, Mode > ConstCastWeakPtr (TWeakPtr< CastFromType, Mode > const &InWeakPtr)
 
template<class ObjectType >
FORCEINLINE SharedPointerInternals::TRawPtrProxy< ObjectTypeMakeShareable (ObjectType *InObject)
 
template<class ObjectType , class DeleterType >
FORCEINLINE SharedPointerInternals::TRawPtrProxyWithDeleter< ObjectType, DeleterType > MakeShareable (ObjectType *InObject, DeleterType &&InDeleter)
 
template<typename InObjectType , ESPMode InMode = ESPMode::ThreadSafe, typename... InArgTypes>
FORCEINLINE TSharedRef< InObjectType, InModeMakeShared (InArgTypes &&... Args)
 
template<class Type >
FORCEINLINE void CleanupPointerArray (TArray< TWeakPtr< Type > > &PointerArray)
 
template<class KeyType , class ValueType >
FORCEINLINE void CleanupPointerMap (TMap< TWeakPtr< KeyType >, ValueType > &PointerMap)
 
template<typename ObjectType , ESPMode Mode>
uint32 GetTypeHash (const TSharedRef< ObjectType, Mode > &InSharedRef)
 
template<typename ObjectType , ESPMode Mode>
uint32 GetTypeHash (const TSharedPtr< ObjectType, Mode > &InSharedPtr)
 
template<typename ObjectType , ESPMode Mode>
uint32 GetTypeHash (const TWeakPtr< ObjectType, Mode > &InWeakPtr)
 

Variables

template<typename T >
constexpr bool TIsTSharedRef_V = false
 
template<class ObjectType , ESPMode InMode>
constexpr bool TIsTSharedRef_V< TSharedRef< ObjectType, InMode > > = true
 
template<class ObjectType , ESPMode InMode>
constexpr bool TIsTSharedRef_V< const TSharedRef< ObjectType, InMode > > = true
 
template<class ObjectType , ESPMode InMode>
constexpr bool TIsTSharedRef_V< volatile TSharedRef< ObjectType, InMode > > = true
 
template<class ObjectType , ESPMode InMode>
constexpr bool TIsTSharedRef_V< const volatile TSharedRef< ObjectType, InMode > > = true
 
template<typename T >
constexpr bool TIsTSharedPtr_V = false
 
template<class ObjectType , ESPMode InMode>
constexpr bool TIsTSharedPtr_V< TSharedPtr< ObjectType, InMode > > = true
 
template<class ObjectType , ESPMode InMode>
constexpr bool TIsTSharedPtr_V< const TSharedPtr< ObjectType, InMode > > = true
 
template<class ObjectType , ESPMode InMode>
constexpr bool TIsTSharedPtr_V< volatile TSharedPtr< ObjectType, InMode > > = true
 
template<class ObjectType , ESPMode InMode>
constexpr bool TIsTSharedPtr_V< const volatile TSharedPtr< ObjectType, InMode > > = true
 
template<typename T >
constexpr bool TIsTWeakPtr_V = false
 
template<class ObjectType , ESPMode InMode>
constexpr bool TIsTWeakPtr_V< TWeakPtr< ObjectType, InMode > > = true
 
template<class ObjectType , ESPMode InMode>
constexpr bool TIsTWeakPtr_V< const TWeakPtr< ObjectType, InMode > > = true
 
template<class ObjectType , ESPMode InMode>
constexpr bool TIsTWeakPtr_V< volatile TWeakPtr< ObjectType, InMode > > = true
 
template<class ObjectType , ESPMode InMode>
constexpr bool TIsTWeakPtr_V< const volatile TWeakPtr< ObjectType, InMode > > = true
 

Macro Definition Documentation

◆ UE_TSHAREDPTR_STATIC_ASSERT_VALID_MODE

Function Documentation

◆ CleanupPointerArray()

template<class Type >
FORCEINLINE void CleanupPointerArray ( TArray< TWeakPtr< Type > > & PointerArray)

Given a TArray of TWeakPtr's, will remove any invalid pointers.

Parameters
PointerArrayThe pointer array to prune invalid pointers out of

Definition at line 2189 of file SharedPointer.h.

◆ CleanupPointerMap()

template<class KeyType , class ValueType >
FORCEINLINE void CleanupPointerMap ( TMap< TWeakPtr< KeyType >, ValueType > & PointerMap)

Given a TMap of TWeakPtr's, will remove any invalid pointers. Not the most efficient.

Parameters
PointerMapThe pointer map to prune invalid pointers out of

Definition at line 2208 of file SharedPointer.h.

◆ ConstCastSharedPtr()

FORCEINLINE TSharedPtr< CastToType, Mode > ConstCastSharedPtr ( TSharedPtr< CastFromType, Mode > const & InSharedPtr)

Casts a 'const' shared pointer to 'mutable' shared pointer. (const_cast)

Parameters
InSharedPtrThe shared pointer to cast

Definition at line 2125 of file SharedPointer.h.

◆ ConstCastSharedRef()

FORCEINLINE TSharedRef< CastToType, Mode > ConstCastSharedRef ( TSharedRef< CastFromType, Mode > const & InSharedRef)

Casts a 'const' shared reference to 'mutable' shared reference. (const_cast)

Parameters
InSharedRefThe shared reference to cast

Definition at line 2113 of file SharedPointer.h.

◆ ConstCastWeakPtr()

FORCEINLINE TWeakPtr< CastToType, Mode > ConstCastWeakPtr ( TWeakPtr< CastFromType, Mode > const & InWeakPtr)

Casts a 'const' weak pointer to 'mutable' weak pointer. (const_cast)

Parameters
InWeakPtrThe weak pointer to cast

Definition at line 2137 of file SharedPointer.h.

◆ DECLARE_TEMPLATE_INTRINSIC_TYPE_LAYOUT()

DECLARE_TEMPLATE_INTRINSIC_TYPE_LAYOUT ( (template< class ObjectType, ESPMode Mode >) ,
(TSharedPtr< ObjectType, Mode >)  )

◆ GetTypeHash() [1/3]

template<typename ObjectType , ESPMode Mode>
uint32 GetTypeHash ( const TSharedPtr< ObjectType, Mode > & InSharedPtr)

Computes a hash code for this object

Parameters
InSharedPtrShared pointer to compute hash code for
Returns
Hash code value

Definition at line 2243 of file SharedPointer.h.

◆ GetTypeHash() [2/3]

template<typename ObjectType , ESPMode Mode>
uint32 GetTypeHash ( const TSharedRef< ObjectType, Mode > & InSharedRef)

Computes a hash code for this object

Parameters
InSharedRefShared pointer to compute hash code for
Returns
Hash code value

Definition at line 2230 of file SharedPointer.h.

◆ GetTypeHash() [3/3]

template<typename ObjectType , ESPMode Mode>
uint32 GetTypeHash ( const TWeakPtr< ObjectType, Mode > & InWeakPtr)

Computes a hash code for this object

Parameters
InWeakPtrWeak pointer to compute hash code for
Returns
Hash code value

Definition at line 2256 of file SharedPointer.h.

◆ IsDerivedFromSharedFromThis()

template<typename T >
constexpr bool IsDerivedFromSharedFromThis ( )
constexpr

Definition at line 1765 of file SharedPointer.h.

+ Here is the call graph for this function:

◆ MakeShareable() [1/2]

MakeShareable utility function. Wrap object pointers with MakeShareable to allow them to be implicitly converted to shared pointers! This is useful in assignment operations, or when returning a shared pointer from a function.

Definition at line 2150 of file SharedPointer.h.

◆ MakeShareable() [2/2]

template<class ObjectType , class DeleterType >
FORCEINLINE SharedPointerInternals::TRawPtrProxyWithDeleter< ObjectType, DeleterType > MakeShareable ( ObjectType * InObject,
DeleterType && InDeleter )

MakeShareable utility function. Wrap object pointers with MakeShareable to allow them to be implicitly converted to shared pointers! This is useful in assignment operations, or when returning a shared pointer from a function.

Definition at line 2163 of file SharedPointer.h.

◆ MakeShared()

template<typename InObjectType , ESPMode InMode = ESPMode::ThreadSafe, typename... InArgTypes>
FORCEINLINE TSharedRef< InObjectType, InMode > MakeShared ( InArgTypes &&... Args)

MakeShared utility function. Allocates a new ObjectType and reference controller in a single memory block. Equivalent to std::make_shared.

NOTE: If the constructor is private/protected you will need to friend the intrusive reference controller in your class. e.g. template <typename ObjectType> friend class SharedPointerInternals::TIntrusiveReferenceController;

Definition at line 2177 of file SharedPointer.h.

◆ operator!=() [1/13]

FORCEINLINE bool operator!= ( TSharedPtr< ObjectTypeA, Mode > const & InSharedPtrA,
TSharedPtr< ObjectTypeB, Mode > const & InSharedPtrB )

Global inequality operator for TSharedPtr

Returns
True if the two shared pointers are not equal

Definition at line 1837 of file SharedPointer.h.

◆ operator!=() [2/13]

FORCEINLINE bool operator!= ( TSharedPtr< ObjectTypeA, Mode > const & InSharedPtrA,
TWeakPtr< ObjectTypeB, Mode > const & InWeakPtrB )

Global equality operator for TWeakPtr

Returns
True if the weak pointer and the shared ptr are not equal

Definition at line 2053 of file SharedPointer.h.

◆ operator!=() [3/13]

template<class ObjectTypeA , ESPMode Mode>
FORCEINLINE bool operator!= ( TSharedPtr< ObjectTypeA, Mode > const & InSharedPtrA,
TYPE_OF_NULLPTR  )

Global inequality operator for TSharedPtr

Returns
True if the shared pointer is not null

Definition at line 1849 of file SharedPointer.h.

◆ operator!=() [4/13]

FORCEINLINE bool operator!= ( TSharedPtr< ObjectTypeB, Mode > const & InSharedPtr,
TSharedRef< ObjectTypeA, Mode > const & InSharedRef )

Tests to see if a TSharedRef is not "equal" to a TSharedPtr (shared pointer is invalid, or both refer to different objects) (reverse)

Returns
True if the shared reference and shared pointer are not "equal"

Definition at line 1909 of file SharedPointer.h.

◆ operator!=() [5/13]

FORCEINLINE bool operator!= ( TSharedRef< ObjectTypeA, Mode > const & InSharedRef,
TSharedPtr< ObjectTypeB, Mode > const & InSharedPtr )

Tests to see if a TSharedRef is not "equal" to a TSharedPtr (shared pointer is invalid, or both refer to different objects)

Returns
True if the shared reference and shared pointer are not "equal"

Definition at line 1885 of file SharedPointer.h.

◆ operator!=() [6/13]

FORCEINLINE bool operator!= ( TSharedRef< ObjectTypeA, Mode > const & InSharedRefA,
TSharedRef< ObjectTypeB, Mode > const & InSharedRefB )

Global inequality operator for TSharedRef

Returns
True if the two shared references are not equal

Definition at line 1789 of file SharedPointer.h.

◆ operator!=() [7/13]

FORCEINLINE bool operator!= ( TSharedRef< ObjectTypeA, Mode > const & InSharedRefA,
TWeakPtr< ObjectTypeB, Mode > const & InWeakPtrB )

Global equality operator for TWeakPtr

Returns
True if the weak pointer and the shared ref are not equal

Definition at line 2041 of file SharedPointer.h.

◆ operator!=() [8/13]

FORCEINLINE bool operator!= ( TWeakPtr< ObjectTypeA, Mode > const & InWeakPtrA,
TSharedPtr< ObjectTypeB, Mode > const & InSharedPtrB )

Global equality operator for TWeakPtr

Returns
True if the weak pointer and the shared ptr are not equal

Definition at line 2029 of file SharedPointer.h.

◆ operator!=() [9/13]

FORCEINLINE bool operator!= ( TWeakPtr< ObjectTypeA, Mode > const & InWeakPtrA,
TSharedRef< ObjectTypeB, Mode > const & InSharedRefB )

Global equality operator for TWeakPtr

Returns
True if the weak pointer and the shared ref are not equal

Definition at line 2017 of file SharedPointer.h.

◆ operator!=() [10/13]

FORCEINLINE bool operator!= ( TWeakPtr< ObjectTypeA, Mode > const & InWeakPtrA,
TWeakPtr< ObjectTypeB, Mode > const & InWeakPtrB )

Global inequality operator for TWeakPtr

Returns
True if the two weak pointers are not equal

Definition at line 2005 of file SharedPointer.h.

◆ operator!=() [11/13]

template<class ObjectTypeA , ESPMode Mode>
FORCEINLINE bool operator!= ( TWeakPtr< ObjectTypeA, Mode > const & InWeakPtrA,
TYPE_OF_NULLPTR  )

Global inequality operator for TWeakPtr

Returns
True if the weak pointer is not null

Definition at line 2065 of file SharedPointer.h.

◆ operator!=() [12/13]

template<class ObjectTypeB , ESPMode Mode>
FORCEINLINE bool operator!= ( TYPE_OF_NULLPTR ,
TSharedPtr< ObjectTypeB, Mode > const & InSharedPtrB )

Global inequality operator for TSharedPtr

Returns
True if the shared pointer is not null

Definition at line 1861 of file SharedPointer.h.

◆ operator!=() [13/13]

template<class ObjectTypeB , ESPMode Mode>
FORCEINLINE bool operator!= ( TYPE_OF_NULLPTR ,
TWeakPtr< ObjectTypeB, Mode > const & InWeakPtrB )

Global inequality operator for TWeakPtr

Returns
True if the weak pointer is not null

Definition at line 2077 of file SharedPointer.h.

◆ operator==() [1/13]

FORCEINLINE bool operator== ( TSharedPtr< ObjectTypeA, Mode > const & InSharedPtrA,
TSharedPtr< ObjectTypeB, Mode > const & InSharedPtrB )

Global equality operator for TSharedPtr

Returns
True if the two shared pointers are equal

Definition at line 1801 of file SharedPointer.h.

◆ operator==() [2/13]

FORCEINLINE bool operator== ( TSharedPtr< ObjectTypeA, Mode > const & InSharedPtrA,
TWeakPtr< ObjectTypeB, Mode > const & InWeakPtrB )

Global equality operator for TWeakPtr

Returns
True if the weak pointer and the shared ptr are equal

Definition at line 1969 of file SharedPointer.h.

◆ operator==() [3/13]

template<class ObjectTypeA , ESPMode Mode>
FORCEINLINE bool operator== ( TSharedPtr< ObjectTypeA, Mode > const & InSharedPtrA,
TYPE_OF_NULLPTR  )

Global equality operator for TSharedPtr

Returns
True if the shared pointer is null

Definition at line 1813 of file SharedPointer.h.

◆ operator==() [4/13]

FORCEINLINE bool operator== ( TSharedPtr< ObjectTypeB, Mode > const & InSharedPtr,
TSharedRef< ObjectTypeA, Mode > const & InSharedRef )

Tests to see if a TSharedRef is "equal" to a TSharedPtr (both are valid and refer to the same object) (reverse)

Returns
True if the shared reference and shared pointer are "equal"

Definition at line 1897 of file SharedPointer.h.

◆ operator==() [5/13]

FORCEINLINE bool operator== ( TSharedRef< ObjectTypeA, Mode > const & InSharedRef,
TSharedPtr< ObjectTypeB, Mode > const & InSharedPtr )

Tests to see if a TSharedRef is "equal" to a TSharedPtr (both are valid and refer to the same object)

Returns
True if the shared reference and shared pointer are "equal"

Definition at line 1873 of file SharedPointer.h.

◆ operator==() [6/13]

FORCEINLINE bool operator== ( TSharedRef< ObjectTypeA, Mode > const & InSharedRefA,
TSharedRef< ObjectTypeB, Mode > const & InSharedRefB )

Global equality operator for TSharedRef

Returns
True if the two shared references are equal

Definition at line 1777 of file SharedPointer.h.

◆ operator==() [7/13]

FORCEINLINE bool operator== ( TSharedRef< ObjectTypeA, Mode > const & InSharedRefA,
TWeakPtr< ObjectTypeB, Mode > const & InWeakPtrB )

Global equality operator for TWeakPtr

Returns
True if the weak pointer and the shared ref are equal

Definition at line 1957 of file SharedPointer.h.

◆ operator==() [8/13]

FORCEINLINE bool operator== ( TWeakPtr< ObjectTypeA, Mode > const & InWeakPtrA,
TSharedPtr< ObjectTypeB, Mode > const & InSharedPtrB )

Global equality operator for TWeakPtr

Returns
True if the weak pointer and the shared ptr are equal

Definition at line 1945 of file SharedPointer.h.

◆ operator==() [9/13]

FORCEINLINE bool operator== ( TWeakPtr< ObjectTypeA, Mode > const & InWeakPtrA,
TSharedRef< ObjectTypeB, Mode > const & InSharedRefB )

Global equality operator for TWeakPtr

Returns
True if the weak pointer and the shared ref are equal

Definition at line 1933 of file SharedPointer.h.

◆ operator==() [10/13]

FORCEINLINE bool operator== ( TWeakPtr< ObjectTypeA, Mode > const & InWeakPtrA,
TWeakPtr< ObjectTypeB, Mode > const & InWeakPtrB )

Global equality operator for TWeakPtr

Returns
True if the two weak pointers are equal

Definition at line 1921 of file SharedPointer.h.

◆ operator==() [11/13]

template<class ObjectTypeA , ESPMode Mode>
FORCEINLINE bool operator== ( TWeakPtr< ObjectTypeA, Mode > const & InWeakPtrA,
TYPE_OF_NULLPTR  )

Global equality operator for TWeakPtr

Returns
True if the weak pointer is null

Definition at line 1981 of file SharedPointer.h.

◆ operator==() [12/13]

template<class ObjectTypeB , ESPMode Mode>
FORCEINLINE bool operator== ( TYPE_OF_NULLPTR ,
TSharedPtr< ObjectTypeB, Mode > const & InSharedPtrB )

Global equality operator for TSharedPtr

Returns
True if the shared pointer is null

Definition at line 1825 of file SharedPointer.h.

◆ operator==() [13/13]

template<class ObjectTypeB , ESPMode Mode>
FORCEINLINE bool operator== ( TYPE_OF_NULLPTR ,
TWeakPtr< ObjectTypeB, Mode > const & InWeakPtrB )

Global equality operator for TWeakPtr

Returns
True if the weak pointer is null

Definition at line 1993 of file SharedPointer.h.

◆ StaticCastSharedPtr()

FORCEINLINE TSharedPtr< CastToType, Mode > StaticCastSharedPtr ( TSharedPtr< CastFromType, Mode > const & InSharedPtr)

Casts a shared pointer of one type to another type. (static_cast) Useful for down-casting.

Parameters
InSharedPtrThe shared pointer to cast

Definition at line 2089 of file SharedPointer.h.

◆ StaticCastSharedRef()

FORCEINLINE TSharedRef< CastToType, Mode > StaticCastSharedRef ( TSharedRef< CastFromType, Mode > const & InSharedRef)

SharedPointer - Unreal smart pointer library

This is a smart pointer library consisting of shared references (TSharedRef), shared pointers (TSharedPtr), weak pointers (TWeakPtr) as well as related helper functions and classes. This implementation is modeled after the C++0x standard library's shared_ptr as well as Boost smart pointers.

Benefits of using shared references and pointers:

Clean syntax.  You can copy, dereference and compare shared pointers just like regular C++ pointers.
Prevents memory leaks.  Resources are destroyed automatically when there are no more shared references.
Weak referencing.  Weak pointers allow you to safely check when an object has been destroyed.
Thread safety.  Includes "thread safe" version that can be safely accessed from multiple threads.
Ubiquitous.  You can create shared pointers to virtually *any* type of object.
Runtime safety.  Shared references are never null and can always be dereferenced.
No reference cycles.  Use weak pointers to break reference cycles.
Confers intent.  You can easily tell an object *owner* from an *observer*.
Performance.  Shared pointers have minimal overhead.  All operations are constant-time.
Robust features.  Supports 'const', forward declarations to incomplete types, type-casting, etc.
Memory.  Only twice the size of a C++ pointer in 64-bit (plus a shared 16-byte reference controller.)

This library contains the following smart pointers:

TSharedRef - Non-nullable, reference counted non-intrusive authoritative smart pointer
TSharedPtr - Reference counted non-intrusive authoritative smart pointer
TWeakPtr - Reference counted non-intrusive weak pointer reference

Additionally, the following helper classes and functions are defined:

MakeShareable() - Used to initialize shared pointers from C++ pointers (enables implicit conversion)
MakeShared<T>(...) - Used to construct a T alongside its controller, saving an allocation.
TSharedFromThis - You can derive your own class from this to acquire a TSharedRef from "this"
StaticCastSharedRef() - Static cast utility function, typically used to downcast to a derived type. 
ConstCastSharedRef() - Converts a 'const' reference to 'mutable' smart reference
StaticCastSharedPtr() - Dynamic cast utility function, typically used to downcast to a derived type. 
ConstCastSharedPtr() - Converts a 'const' smart pointer to 'mutable' smart pointer
StaticCastWeakPtr() - Dynamic cast utility function, typically used to downcast to a derived type.
ConstCastWeakPtr() - Converts a 'const' smart pointer to 'mutable' smart pointer

Examples:

Tips:

  • Use TSharedRef instead of TSharedPtr whenever possible – it can never be nullptr!
  • You can call TSharedPtr::Reset() to release a reference to your object (and potentially deallocate)
  • Use the MakeShareable() helper function to implicitly convert to TSharedRefs or TSharedPtrs
  • Prefer MakeShared<T>(...) to MakeShareable(new T(...))
  • You can never reset a TSharedRef or assign it to nullptr, but you can assign it a new object
  • Shared pointers assume ownership of objects – no need to call delete yourself!
  • Usually you should "operator new" when passing a C++ pointer to a new shared pointer
  • Use TSharedRef or TSharedPtr when passing smart pointers as function parameters, not TWeakPtr
  • The "thread-safe" versions of smart pointers are a bit slower – only use them when needed
  • You can forward declare shared pointers to incomplete types, just how you'd expect to!
  • Shared pointers of compatible types will be converted implicitly (e.g. upcasting)
  • You can create a typedef to TSharedRef< MyClass > to make it easier to type
  • For best performance, minimize calls to TWeakPtr::Pin (or conversions to TSharedRef/TSharedPtr)
  • Your class can return itself as a shared reference if you derive from TSharedFromThis
  • To downcast a pointer to a derived object class, use the StaticCastSharedRef, StaticCastSharedRef or StaticCastWeakPtr functions
  • 'const' objects are fully supported with shared pointers!
  • You can make a 'const' pointer mutable using the ConstCastSharedRef, ConstCastSharedPtr or ConstCastWeakPtr functions

Limitations:

- Shared pointers are not compatible with Unreal objects (UObject classes)!
- Currently only types with that have regular destructors (no custom deleters)
- Dynamically-allocated arrays are not supported yet (e.g. MakeShareable( new int32[20] ))
- Implicit conversion of TSharedPtr/TSharedRef to bool is not supported yet

Differences from other implementations (e.g. boost:shared_ptr, std::shared_ptr):

- Type names and method names are more consistent with Unreal's codebase
- You must use Pin() to convert weak pointers to shared pointers (no explicit constructor)
- Thread-safety features are optional instead of forced
- TSharedFromThis returns a shared *reference*, not a shared *pointer*
- Some features were omitted (e.g. use_count(), unique(), etc.)
- No exceptions are allowed (all related features have been omitted)
- Custom allocators and custom delete functions are not supported yet
- Our implementation supports non-nullable smart pointers (TSharedRef)
- Several other new features added, such as MakeShareable and nullptr assignment

Why did we write our own Unreal shared pointer instead of using available alternatives?

- std::shared_ptr (and even tr1::shared_ptr) is not yet available on all platforms
- Allows for a more consistent implementation on all compilers and platforms
- Can work seamlessly with other Unreal containers and types
- Better control over platform specifics, including threading and optimizations
- We want thread-safety features to be optional (for performance)
- We've added our own improvements (MakeShareable, assign to nullptr, etc.)
- Exceptions were not needed nor desired in our implementation
- We wanted more control over performance (inlining, memory, use of virtuals, etc.)
- Potentially easier to debug (liberal code comments, etc.)
- Prefer not to introduce new third party dependencies when not needed

Casts a shared reference of one type to another type. (static_cast) Useful for down-casting.

Parameters
InSharedRefThe shared reference to cast

Definition at line 126 of file SharedPointer.h.

◆ StaticCastWeakPtr()

FORCEINLINE TWeakPtr< CastToType, Mode > StaticCastWeakPtr ( TWeakPtr< CastFromType, Mode > const & InWeakPtr)

Casts a weak pointer of one type to another type. (static_cast) Useful for down-casting.

Parameters
InWeakPtrThe weak pointer to cast

Definition at line 2101 of file SharedPointer.h.

Variable Documentation

◆ TIsTSharedPtr_V

template<typename T >
constexpr bool TIsTSharedPtr_V = false
constexpr

Trait which determines whether or not a type is a TSharedPtr.

Definition at line 1219 of file SharedPointer.h.

◆ TIsTSharedPtr_V< const TSharedPtr< ObjectType, InMode > >

Definition at line 1221 of file SharedPointer.h.

◆ TIsTSharedPtr_V< const volatile TSharedPtr< ObjectType, InMode > >

Definition at line 1223 of file SharedPointer.h.

◆ TIsTSharedPtr_V< TSharedPtr< ObjectType, InMode > >

Definition at line 1220 of file SharedPointer.h.

◆ TIsTSharedPtr_V< volatile TSharedPtr< ObjectType, InMode > >

Definition at line 1222 of file SharedPointer.h.

◆ TIsTSharedRef_V

template<typename T >
constexpr bool TIsTSharedRef_V = false
constexpr

Trait which determines whether or not a type is a TSharedRef.

Definition at line 649 of file SharedPointer.h.

◆ TIsTSharedRef_V< const TSharedRef< ObjectType, InMode > >

Definition at line 651 of file SharedPointer.h.

◆ TIsTSharedRef_V< const volatile TSharedRef< ObjectType, InMode > >

Definition at line 653 of file SharedPointer.h.

◆ TIsTSharedRef_V< TSharedRef< ObjectType, InMode > >

Definition at line 650 of file SharedPointer.h.

◆ TIsTSharedRef_V< volatile TSharedRef< ObjectType, InMode > >

Definition at line 652 of file SharedPointer.h.

◆ TIsTWeakPtr_V

template<typename T >
constexpr bool TIsTWeakPtr_V = false
constexpr

Trait which determines whether or not a type is a TWeakPtr.

Definition at line 1535 of file SharedPointer.h.

◆ TIsTWeakPtr_V< const TWeakPtr< ObjectType, InMode > >

Definition at line 1537 of file SharedPointer.h.

◆ TIsTWeakPtr_V< const volatile TWeakPtr< ObjectType, InMode > >

Definition at line 1539 of file SharedPointer.h.

◆ TIsTWeakPtr_V< TWeakPtr< ObjectType, InMode > >

Definition at line 1536 of file SharedPointer.h.

◆ TIsTWeakPtr_V< volatile TWeakPtr< ObjectType, InMode > >

Definition at line 1538 of file SharedPointer.h.