TrinityCore
Trinity::unique_trackable_ptr< T > Class Template Reference

Specialized variant of std::shared_ptr that enforces unique ownership and/or std::unique_ptr with std::weak_ptr capabilities Implementation has the same overhead as a std::shared_ptr, that is, a separate allocation for control block that holds use counters. More...

#include <UniqueTrackablePtr.h>

Public Types

using element_type = T
 
using pointer = T *
 

Public Member Functions

 unique_trackable_ptr ()
 
 unique_trackable_ptr (pointer ptr)
 
template<typename Deleter , std::enable_if_t< std::conjunction_v< std::is_move_constructible< Deleter >, std::is_invocable< Deleter &, T *& > >, int > = 0>
 unique_trackable_ptr (pointer ptr, Deleter deleter)
 
 unique_trackable_ptr (unique_trackable_ptr const &)=delete
 
 unique_trackable_ptr (unique_trackable_ptr &&other) noexcept
 
template<typename T2 , std::enable_if_t< std::is_convertible_v< T2 *, T * >, int > = 0>
 unique_trackable_ptr (unique_trackable_ptr< T2 > &&other) noexcept
 
unique_trackable_ptroperator= (unique_trackable_ptr const &)=delete
 
unique_trackable_ptroperator= (unique_trackable_ptr &&other) noexcept
 
template<typename T2 , std::enable_if_t< std::is_convertible_v< T2 *, T * >, int > = 0>
unique_trackable_ptroperator= (unique_trackable_ptr< T2 > &&other) noexcept
 
 ~unique_trackable_ptr ()=default
 
unique_trackable_ptroperator= (std::nullptr_t)
 
void swap (unique_trackable_ptr &other) noexcept
 
element_typeoperator* () const
 
pointer operator-> () const
 
pointer get () const
 
 operator bool () const
 
void reset ()
 
void reset (pointer ptr)
 
template<class Deleter , std::enable_if_t< std::conjunction_v< std::is_move_constructible< Deleter >, std::is_invocable< Deleter &, T *& > >, int > = 0>
void reset (pointer ptr, Deleter deleter)
 

Private Attributes

std::shared_ptr< element_type_ptr
 

Friends

template<typename T0 >
class unique_trackable_ptr
 
template<typename T0 >
class unique_weak_ptr
 
template<typename T0 , typename... Args>
std::enable_if_t<!std::is_array_v< T0 >, unique_trackable_ptr< T0 > > make_unique_trackable (Args &&... args)
 
template<typename T0 >
std::enable_if_t< std::is_unbounded_array_v< T0 >, unique_trackable_ptr< T0 > > make_unique_trackable (std::size_t N)
 
template<typename T0 >
std::enable_if_t< std::is_unbounded_array_v< T0 >, unique_trackable_ptr< T0 > > make_unique_trackable (std::size_t N, std::remove_extent_t< T0 > const &val)
 
template<typename T0 >
std::enable_if_t< std::is_bounded_array_v< T0 >, unique_trackable_ptr< T0 > > make_unique_trackable ()
 
template<typename T0 >
std::enable_if_t< std::is_bounded_array_v< T0 >, unique_trackable_ptr< T0 > > make_unique_trackable (std::remove_extent_t< T0 > const &val)
 

Detailed Description

template<typename T>
class Trinity::unique_trackable_ptr< T >

Specialized variant of std::shared_ptr that enforces unique ownership and/or std::unique_ptr with std::weak_ptr capabilities Implementation has the same overhead as a std::shared_ptr, that is, a separate allocation for control block that holds use counters.

Template Parameters
TType of held object

Definition at line 40 of file UniqueTrackablePtr.h.

Member Typedef Documentation

◆ element_type

template<typename T >
using Trinity::unique_trackable_ptr< T >::element_type = T

Definition at line 43 of file UniqueTrackablePtr.h.

◆ pointer

template<typename T >
using Trinity::unique_trackable_ptr< T >::pointer = T*

Definition at line 44 of file UniqueTrackablePtr.h.

Constructor & Destructor Documentation

◆ unique_trackable_ptr() [1/6]

template<typename T >
Trinity::unique_trackable_ptr< T >::unique_trackable_ptr ( )
inline

Definition at line 46 of file UniqueTrackablePtr.h.

◆ unique_trackable_ptr() [2/6]

template<typename T >
Trinity::unique_trackable_ptr< T >::unique_trackable_ptr ( pointer  ptr)
inlineexplicit

Definition at line 48 of file UniqueTrackablePtr.h.

◆ unique_trackable_ptr() [3/6]

template<typename T >
template<typename Deleter , std::enable_if_t< std::conjunction_v< std::is_move_constructible< Deleter >, std::is_invocable< Deleter &, T *& > >, int > = 0>
Trinity::unique_trackable_ptr< T >::unique_trackable_ptr ( pointer  ptr,
Deleter  deleter 
)
inlineexplicit

Definition at line 52 of file UniqueTrackablePtr.h.

◆ unique_trackable_ptr() [4/6]

template<typename T >
Trinity::unique_trackable_ptr< T >::unique_trackable_ptr ( unique_trackable_ptr< T > const &  )
delete

◆ unique_trackable_ptr() [5/6]

template<typename T >
Trinity::unique_trackable_ptr< T >::unique_trackable_ptr ( unique_trackable_ptr< T > &&  other)
inlinenoexcept

Definition at line 57 of file UniqueTrackablePtr.h.

◆ unique_trackable_ptr() [6/6]

template<typename T >
template<typename T2 , std::enable_if_t< std::is_convertible_v< T2 *, T * >, int > = 0>
Trinity::unique_trackable_ptr< T >::unique_trackable_ptr ( unique_trackable_ptr< T2 > &&  other)
inlinenoexcept

Definition at line 61 of file UniqueTrackablePtr.h.

◆ ~unique_trackable_ptr()

template<typename T >
Trinity::unique_trackable_ptr< T >::~unique_trackable_ptr ( )
default

Member Function Documentation

◆ get()

template<typename T >
pointer Trinity::unique_trackable_ptr< T >::get ( ) const
inline

Definition at line 103 of file UniqueTrackablePtr.h.

+ Here is the caller graph for this function:

◆ operator bool()

template<typename T >
Trinity::unique_trackable_ptr< T >::operator bool ( ) const
inlineexplicit

Definition at line 108 of file UniqueTrackablePtr.h.

◆ operator*()

template<typename T >
element_type & Trinity::unique_trackable_ptr< T >::operator* ( ) const
inline

Definition at line 93 of file UniqueTrackablePtr.h.

◆ operator->()

template<typename T >
pointer Trinity::unique_trackable_ptr< T >::operator-> ( ) const
inline

Definition at line 98 of file UniqueTrackablePtr.h.

◆ operator=() [1/4]

template<typename T >
unique_trackable_ptr & Trinity::unique_trackable_ptr< T >::operator= ( std::nullptr_t  )
inline

Definition at line 81 of file UniqueTrackablePtr.h.

+ Here is the call graph for this function:

◆ operator=() [2/4]

template<typename T >
unique_trackable_ptr & Trinity::unique_trackable_ptr< T >::operator= ( unique_trackable_ptr< T > &&  other)
inlinenoexcept

Definition at line 66 of file UniqueTrackablePtr.h.

◆ operator=() [3/4]

template<typename T >
unique_trackable_ptr & Trinity::unique_trackable_ptr< T >::operator= ( unique_trackable_ptr< T > const &  )
delete

◆ operator=() [4/4]

template<typename T >
template<typename T2 , std::enable_if_t< std::is_convertible_v< T2 *, T * >, int > = 0>
unique_trackable_ptr & Trinity::unique_trackable_ptr< T >::operator= ( unique_trackable_ptr< T2 > &&  other)
inlinenoexcept

Definition at line 73 of file UniqueTrackablePtr.h.

◆ reset() [1/3]

template<typename T >
void Trinity::unique_trackable_ptr< T >::reset ( )
inline

Definition at line 113 of file UniqueTrackablePtr.h.

+ Here is the caller graph for this function:

◆ reset() [2/3]

template<typename T >
void Trinity::unique_trackable_ptr< T >::reset ( pointer  ptr)
inline

Definition at line 118 of file UniqueTrackablePtr.h.

◆ reset() [3/3]

template<typename T >
template<class Deleter , std::enable_if_t< std::conjunction_v< std::is_move_constructible< Deleter >, std::is_invocable< Deleter &, T *& > >, int > = 0>
void Trinity::unique_trackable_ptr< T >::reset ( pointer  ptr,
Deleter  deleter 
)
inline

Definition at line 124 of file UniqueTrackablePtr.h.

◆ swap()

template<typename T >
void Trinity::unique_trackable_ptr< T >::swap ( unique_trackable_ptr< T > &  other)
inlinenoexcept

Definition at line 87 of file UniqueTrackablePtr.h.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

Friends And Related Function Documentation

◆ make_unique_trackable [1/5]

template<typename T >
template<typename T0 >
std::enable_if_t< std::is_bounded_array_v< T0 >, unique_trackable_ptr< T0 > > make_unique_trackable ( )
friend

Definition at line 370 of file UniqueTrackablePtr.h.

◆ make_unique_trackable [2/5]

template<typename T >
template<typename T0 , typename... Args>
std::enable_if_t<!std::is_array_v< T0 >, unique_trackable_ptr< T0 > > make_unique_trackable ( Args &&...  args)
friend

Definition at line 346 of file UniqueTrackablePtr.h.

◆ make_unique_trackable [3/5]

template<typename T >
template<typename T0 >
std::enable_if_t< std::is_bounded_array_v< T0 >, unique_trackable_ptr< T0 > > make_unique_trackable ( std::remove_extent_t< T0 > const &  val)
friend

◆ make_unique_trackable [4/5]

template<typename T >
template<typename T0 >
std::enable_if_t< std::is_unbounded_array_v< T0 >, unique_trackable_ptr< T0 > > make_unique_trackable ( std::size_t  N)
friend

Definition at line 354 of file UniqueTrackablePtr.h.

◆ make_unique_trackable [5/5]

template<typename T >
template<typename T0 >
std::enable_if_t< std::is_unbounded_array_v< T0 >, unique_trackable_ptr< T0 > > make_unique_trackable ( std::size_t  N,
std::remove_extent_t< T0 > const &  val 
)
friend

◆ unique_trackable_ptr

template<typename T >
template<typename T0 >
friend class unique_trackable_ptr
friend

Definition at line 131 of file UniqueTrackablePtr.h.

◆ unique_weak_ptr

template<typename T >
template<typename T0 >
friend class unique_weak_ptr
friend

Definition at line 134 of file UniqueTrackablePtr.h.

Member Data Documentation

◆ _ptr

template<typename T >
std::shared_ptr<element_type> Trinity::unique_trackable_ptr< T >::_ptr
private

Definition at line 151 of file UniqueTrackablePtr.h.


The documentation for this class was generated from the following file: