Raven Engine v0.1
A modern 3D Game Engine
Loading...
Searching...
No Matches
Raven::Ref< T > Class Template Reference

Intrusive reference-counted smart pointer. More...

#include <Ref.h>

Public Member Functions

 Ref (T *ptr=nullptr)
 Constructs a Ref from a raw pointer.
 Ref (const Ref &other) noexcept
 Copy constructor. Increments reference count.
 Ref (Ref &&other) noexcept
 Move constructor. Transfers ownership without increment.
template<typename T2>
requires (std::is_convertible_v<T2*, T*>)
 Ref (const Ref< T2 > &other) noexcept
 Copy constructor from compatible Ref<T2>.
template<typename T2>
requires (std::is_convertible_v<T2*, T*>)
 Ref (Ref< T2 > &&other) noexcept
 Move constructor from compatible Ref<T2>.
 ~Ref ()
 Destructor. Decrements reference count and deletes if zero.
Refoperator= (const Ref &other) noexcept
 Copy assignment. Adjusts reference counts appropriately.
Refoperator= (Ref &&other) noexcept
 Move assignment. Transfers ownership.
template<typename T2>
Ref< T2 > As () const
 Casts this Ref to a compatible Ref<T2>.
T * Get () noexcept
 Gets the raw managed pointer.
const T * Get () const noexcept
 Gets the raw managed pointer (const).
T & operator* ()
 Dereference operator.
const T & operator* () const
 Dereference operator (const).
T * operator-> ()
 Arrow operator.
const T * operator-> () const
 Arrow operator (const).
 operator bool () const noexcept
 Bool conversion. True if managing a non-null pointer.
bool operator== (const Ref< T > &other) const noexcept
 Equality comparison.
bool operator!= (const Ref< T > &other) const noexcept
 Inequality comparison.
void Release ()
 Manually releases this reference.
void Delete ()
 Deletes the managed object immediately.
void Reset (T *ptr=nullptr) noexcept
 Resets this Ref to manage a new pointer.

Static Public Member Functions

template<typename... Args>
static Ref< T > Create (Args &&... args)
 Creates a Ref<T> by allocating with rnew.

Friends

template<typename T2>
class Ref

Detailed Description

template<typename T>
class Raven::Ref< T >

Intrusive reference-counted smart pointer.

Ref<T> provides shared ownership of an object derived from RefCounted. The lifetime of the object is automatically managed through an atomic reference counter stored inside the object.

When the last Ref<T> referencing an object is destroyed or reset, the object is deleted using rdelete.

Template Parameters
TType of the managed object.

Constructor & Destructor Documentation

◆ Ref() [1/5]

template<typename T>
Raven::Ref< T >::Ref ( T * ptr = nullptr)
inline

Constructs a Ref from a raw pointer.

Parameters
ptrPointer to manage (must inherit RefCounted).

◆ Ref() [2/5]

template<typename T>
Raven::Ref< T >::Ref ( const Ref< T > & other)
inlinenoexcept

Copy constructor. Increments reference count.

◆ Ref() [3/5]

template<typename T>
Raven::Ref< T >::Ref ( Ref< T > && other)
inlinenoexcept

Move constructor. Transfers ownership without increment.

◆ Ref() [4/5]

template<typename T>
template<typename T2>
requires (std::is_convertible_v<T2*, T*>)
Raven::Ref< T >::Ref ( const Ref< T2 > & other)
inlinenoexcept

Copy constructor from compatible Ref<T2>.

Template Parameters
T2Convertible type to T.

◆ Ref() [5/5]

template<typename T>
template<typename T2>
requires (std::is_convertible_v<T2*, T*>)
Raven::Ref< T >::Ref ( Ref< T2 > && other)
inlinenoexcept

Move constructor from compatible Ref<T2>.

Template Parameters
T2Convertible type to T.

◆ ~Ref()

template<typename T>
Raven::Ref< T >::~Ref ( )
inline

Destructor. Decrements reference count and deletes if zero.

Member Function Documentation

◆ As()

template<typename T>
template<typename T2>
Ref< T2 > Raven::Ref< T >::As ( ) const
inline

Casts this Ref to a compatible Ref<T2>.

Allows upcasting or downcasting between related types. Compile-time checked to ensure types are related.

Template Parameters
T2Target type.
Returns
Ref<T2> referencing the same object.

◆ Create()

template<typename T>
template<typename... Args>
Ref< T > Raven::Ref< T >::Create ( Args &&... args)
inlinestatic

Creates a Ref<T> by allocating with rnew.

Constructs T in-place and returns a Ref managing it.

Template Parameters
ArgsConstructor argument types.
Parameters
argsArguments forwarded to T constructor.
Returns
Ref<T> managing the new object.

◆ Delete()

template<typename T>
void Raven::Ref< T >::Delete ( )
inline

Deletes the managed object immediately.

Forces deletion via rdelete and clears the pointer. Use with caution.

◆ Get() [1/2]

template<typename T>
const T * Raven::Ref< T >::Get ( ) const
inlinenoexcept

Gets the raw managed pointer (const).

◆ Get() [2/2]

template<typename T>
T * Raven::Ref< T >::Get ( )
inlinenoexcept

Gets the raw managed pointer.

◆ operator bool()

template<typename T>
Raven::Ref< T >::operator bool ( ) const
inlineexplicitnoexcept

Bool conversion. True if managing a non-null pointer.

◆ operator!=()

template<typename T>
bool Raven::Ref< T >::operator!= ( const Ref< T > & other) const
inlinenoexcept

Inequality comparison.

◆ operator*() [1/2]

template<typename T>
T & Raven::Ref< T >::operator* ( )
inline

Dereference operator.

◆ operator*() [2/2]

template<typename T>
const T & Raven::Ref< T >::operator* ( ) const
inline

Dereference operator (const).

◆ operator->() [1/2]

template<typename T>
T * Raven::Ref< T >::operator-> ( )
inline

Arrow operator.

◆ operator->() [2/2]

template<typename T>
const T * Raven::Ref< T >::operator-> ( ) const
inline

Arrow operator (const).

◆ operator=() [1/2]

template<typename T>
Ref & Raven::Ref< T >::operator= ( const Ref< T > & other)
inlinenoexcept

Copy assignment. Adjusts reference counts appropriately.

◆ operator=() [2/2]

template<typename T>
Ref & Raven::Ref< T >::operator= ( Ref< T > && other)
inlinenoexcept

Move assignment. Transfers ownership.

◆ operator==()

template<typename T>
bool Raven::Ref< T >::operator== ( const Ref< T > & other) const
inlinenoexcept

Equality comparison.

◆ Release()

template<typename T>
void Raven::Ref< T >::Release ( )
inline

Manually releases this reference.

Decrements reference count and deletes the object if this was the last owner.

◆ Reset()

template<typename T>
void Raven::Ref< T >::Reset ( T * ptr = nullptr)
inlinenoexcept

Resets this Ref to manage a new pointer.

Parameters
ptrNew pointer (default nullptr).

◆ Ref

template<typename T>
template<typename T2>
friend class Ref
friend

Allow Ref<T2> access.


The documentation for this class was generated from the following file:
  • Engine/src/Raven/Memory/Ref.h