xrpld
Loading...
Searching...
No Matches
xrpl::WeakIntrusive< T > Class Template Reference

A weak intrusive pointer class for the SharedIntrusive pointer class. More...

#include <IntrusivePointer.h>

Public Member Functions

 WeakIntrusive ()=default
 WeakIntrusive (WeakIntrusive const &rhs)
 WeakIntrusive (WeakIntrusive &&rhs)
 WeakIntrusive (SharedIntrusive< T > const &rhs)
 WeakIntrusive (SharedIntrusive< T > const &&rhs)=delete
WeakIntrusiveoperator= (WeakIntrusive const &)=delete
template<class TT>
WeakIntrusiveoperator= (SharedIntrusive< TT > const &rhs)
void adopt (T *ptr)
 Adopt the raw pointer and increment the weak count.
 ~WeakIntrusive ()
SharedIntrusive< T > lock () const
 Get a strong pointer from the weak pointer, if possible.
bool expired () const
 Return true if the strong count is zero.
void reset ()
 Set the pointer to null and decrement the weak count.

Private Member Functions

void unsafeReleaseNoStore ()
 Decrement the weak count.

Private Attributes

T * ptr_ = nullptr

Detailed Description

template<class T>
class xrpl::WeakIntrusive< T >

A weak intrusive pointer class for the SharedIntrusive pointer class.

Note that this weak pointer class asks differently from normal weak pointer classes. When the strong pointer count goes to zero, the "partialDestructor" is called. See the comment on SharedIntrusive for a fuller explanation.

Definition at line 221 of file IntrusivePointer.h.

Constructor & Destructor Documentation

◆ WeakIntrusive() [1/5]

template<class T>
xrpl::WeakIntrusive< T >::WeakIntrusive ( )
default

◆ WeakIntrusive() [2/5]

template<class T>
xrpl::WeakIntrusive< T >::WeakIntrusive ( WeakIntrusive< T > const & rhs)

◆ WeakIntrusive() [3/5]

template<class T>
xrpl::WeakIntrusive< T >::WeakIntrusive ( WeakIntrusive< T > && rhs)

◆ WeakIntrusive() [4/5]

template<class T>
xrpl::WeakIntrusive< T >::WeakIntrusive ( SharedIntrusive< T > const & rhs)

◆ WeakIntrusive() [5/5]

template<class T>
xrpl::WeakIntrusive< T >::WeakIntrusive ( SharedIntrusive< T > const && rhs)
delete

◆ ~WeakIntrusive()

template<class T>
xrpl::WeakIntrusive< T >::~WeakIntrusive ( )

Member Function Documentation

◆ operator=() [1/2]

template<class T>
WeakIntrusive & xrpl::WeakIntrusive< T >::operator= ( WeakIntrusive< T > const & )
delete

◆ operator=() [2/2]

template<class T>
template<class TT>
WeakIntrusive & xrpl::WeakIntrusive< T >::operator= ( SharedIntrusive< TT > const & rhs)

◆ adopt()

template<class T>
void xrpl::WeakIntrusive< T >::adopt ( T * ptr)

Adopt the raw pointer and increment the weak count.

◆ lock()

template<class T>
SharedIntrusive< T > xrpl::WeakIntrusive< T >::lock ( ) const

Get a strong pointer from the weak pointer, if possible.

This will only return a seated pointer if the strong count on the raw pointer is non-zero before locking.

◆ expired()

template<class T>
bool xrpl::WeakIntrusive< T >::expired ( ) const
nodiscard

Return true if the strong count is zero.

◆ reset()

template<class T>
void xrpl::WeakIntrusive< T >::reset ( )

Set the pointer to null and decrement the weak count.

Note: This may run the destructor if the strong count is zero.

◆ unsafeReleaseNoStore()

template<class T>
void xrpl::WeakIntrusive< T >::unsafeReleaseNoStore ( )
private

Decrement the weak count.

This does not set the raw pointer to null.

Note: This may run the destructor if the strong count is zero.

Member Data Documentation

◆ ptr_

template<class T>
T* xrpl::WeakIntrusive< T >::ptr_ = nullptr
private

Definition at line 274 of file IntrusivePointer.h.