StormByte 2.0.0
C++26 foundation of the StormByte suite
 
Loading...
Searching...
No Matches
StormByte::Weak< T > Class Template Reference

Non-owning observer of a Shared control block. More...

#include <StormByte/safe_pointers.hxx>

Public Types

using element_type = T
 Pointee type.
 

Public Member Functions

 Weak () noexcept=default
 Empty observer.
 
 Weak (std::nullptr_t) noexcept
 Empty observer from nullptr.
 
template<class U >
requires Type::SameAs<U, T> || Type::DerivedFrom<U, T>
 Weak (const Shared< U > &owner) noexcept
 Observe owner.
 
 Weak (const Weak &) noexcept=default
 Copy constructor.
 
 Weak (Weak &&) noexcept=default
 Move constructor.
 
Weak & operator= (const Weak &) noexcept=default
 Copy assignment.
 
Weak & operator= (Weak &&) noexcept=default
 Move assignment.
 
 ~Weak ()=default
 Destructor.
 
Shared< T > lock () const noexcept
 Lock the control block.
 
bool expired () const noexcept
 Whether the object is already gone.
 
long use_count () const noexcept
 Number of Shared still holding the object.
 
void reset () noexcept
 Drop this observer.
 
void swap (Weak &other) noexcept
 Exchange observers with other.
 
template<class U >
bool owner_before (const Weak< U > &other) const noexcept
 Ownership order, same as std::weak_ptr::owner_before.
 
template<class U >
bool owner_before (const Shared< U > &other) const noexcept
 Ownership order against a Shared.
 

Friends

template<class U >
class Weak
 
template<class U >
class Shared
 
void swap (Weak &left, Weak &right) noexcept
 Exchange left and right.
 

Detailed Description

template<class T>
class StormByte::Weak< T >

Non-owning observer of a Shared control block.

Template Parameters
TPointee type.

Complements std::weak_ptr. It does not replace it. Construct it only from a Shared. lock returns a Shared, or an empty owner when the object is gone. There is no constructor from std::weak_ptr.

Member Typedef Documentation

◆ element_type

template<class T >
using StormByte::Weak< T >::element_type = T

Pointee type.

Constructor & Destructor Documentation

◆ Weak() [1/5]

template<class T >
StormByte::Weak< T >::Weak ( )
defaultnoexcept

Empty observer.

◆ Weak() [2/5]

template<class T >
StormByte::Weak< T >::Weak ( std::nullptr_t  )
inlinenoexcept

Empty observer from nullptr.

◆ Weak() [3/5]

template<class T >
template<class U >
requires Type::SameAs<U, T> || Type::DerivedFrom<U, T>
StormByte::Weak< T >::Weak ( const Shared< U > &  owner)
inlinenoexcept

Observe owner.

Template Parameters
UPointee convertible to T.
Parameters
ownerOwner to watch.

◆ Weak() [4/5]

template<class T >
StormByte::Weak< T >::Weak ( const Weak< T > &  )
defaultnoexcept

Copy constructor.

◆ Weak() [5/5]

template<class T >
StormByte::Weak< T >::Weak ( Weak< T > &&  )
defaultnoexcept

Move constructor.

◆ ~Weak()

template<class T >
StormByte::Weak< T >::~Weak ( )
default

Destructor.

Member Function Documentation

◆ expired()

template<class T >
bool StormByte::Weak< T >::expired ( ) const
inlinenoexcept

Whether the object is already gone.

Returns
true when lock would return empty.

◆ lock()

template<class T >
Shared< T > StormByte::Weak< T >::lock ( ) const
inlinenoexcept

Lock the control block.

Returns
Shared owning the object, or empty when expired.

◆ operator=() [1/2]

template<class T >
Weak & StormByte::Weak< T >::operator= ( const Weak< T > &  )
defaultnoexcept

Copy assignment.

Returns
*this.

◆ operator=() [2/2]

template<class T >
Weak & StormByte::Weak< T >::operator= ( Weak< T > &&  )
defaultnoexcept

Move assignment.

Returns
*this.

◆ owner_before() [1/2]

template<class T >
template<class U >
bool StormByte::Weak< T >::owner_before ( const Shared< U > &  other) const
inlinenoexcept

Ownership order against a Shared.

Template Parameters
UOther pointee.
Parameters
otherOwner.
Returns
Whether this control block precedes other.

◆ owner_before() [2/2]

template<class T >
template<class U >
bool StormByte::Weak< T >::owner_before ( const Weak< U > &  other) const
inlinenoexcept

Ownership order, same as std::weak_ptr::owner_before.

Template Parameters
UOther pointee.
Parameters
otherOther observer.
Returns
Whether this control block precedes other.

◆ reset()

template<class T >
void StormByte::Weak< T >::reset ( )
inlinenoexcept

Drop this observer.

◆ swap()

template<class T >
void StormByte::Weak< T >::swap ( Weak< T > &  other)
inlinenoexcept

Exchange observers with other.

Parameters
otherOther observer.

◆ use_count()

template<class T >
long StormByte::Weak< T >::use_count ( ) const
inlinenoexcept

Number of Shared still holding the object.

Returns
Use count, or 0 when expired.

Friends And Related Symbol Documentation

◆ Shared

template<class T >
template<class U >
friend class Shared
friend

◆ swap

template<class T >
void swap ( Weak< T > &  left,
Weak< T > &  right 
)
friend

Exchange left and right.

Parameters
leftObserver.
rightObserver.

◆ Weak

template<class T >
template<class U >
friend class Weak
friend

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