ATLAS Offline Software
Public Types | Public Member Functions | Private Member Functions | Private Attributes | Friends | List of all members
CxxUtils::RefCountedPtr< T > Class Template Reference

Simple smart pointer for Gaudi-style refcounted objects. More...

#include <RefCountedPtr.h>

Collaboration diagram for CxxUtils::RefCountedPtr< T >:

Public Types

using element_type = T
 

Public Member Functions

 RefCountedPtr ()=default
 Default constructor. More...
 
 RefCountedPtr (T *p)
 Constructor from pointer. Adds to the refcount. More...
 
template<CxxUtils::detail::RefCounted OTHER>
requires std::convertible_to< OTHER *, T * > RefCountedPtr (std::unique_ptr< OTHER > &&other)
 Constructor from unique_ptr. Adds to the refcount. More...
 
 RefCountedPtr (const RefCountedPtr &other)
 Copy constructor. More...
 
 RefCountedPtr (RefCountedPtr &&other)
 Move constructor. More...
 
template<CxxUtils::detail::RefCounted OTHER>
requires std::convertible_to< OTHER *, T * > RefCountedPtr (const RefCountedPtr< OTHER > &other)
 Constructor from another RefCountedPtr, with a different type. More...
 
template<CxxUtils::detail::RefCounted OTHER>
requires std::convertible_to< OTHER *, T * > RefCountedPtr (RefCountedPtr< OTHER > &&other)
 Move from another RefCountedPtr, with a different type. More...
 
RefCountedPtroperator= (const RefCountedPtr &other)
 Assignment. More...
 
RefCountedPtroperator= (RefCountedPtr &&other)
 Move. More...
 
RefCountedPtroperator= (T *p)
 Assignment from pointer. More...
 
template<CxxUtils::detail::RefCounted OTHER>
requires std::convertible_to< OTHER *, T * > RefCountedPtroperator= (const RefCountedPtr< OTHER > &other)
 Assignment from different type. More...
 
template<CxxUtils::detail::RefCounted OTHER>
requires std::convertible_to< OTHER *, T * > RefCountedPtroperator= (RefCountedPtr< OTHER > &&other)
 Move from different type. More...
 
 ~RefCountedPtr ()
 Destructor. More...
 
void reset (T *ptr=nullptr)
 Change the pointer. More...
 
bool isValid () const
 Check if the pointer is valid. More...
 
 operator bool () const
 Check if the pointer is valid. More...
 
bool operator! () const
 Check if the pointer is invalid. More...
 
T * get ()
 Get the pointer. More...
 
const T * get () const
 
 operator T* ()
 Convert to pointer. More...
 
 operator const T * () const
 
T * operator-> ()
 Dereference. More...
 
const T * operator-> () const
 
T & operator* ()
 Dereference. More...
 
const T & operator* () const
 

Private Member Functions

T * release ()
 

Private Attributes

T * m_ptr = nullptr
 Pointer. More...
 

Friends

template<CxxUtils::detail::RefCounted OTHER>
class RefCountedPtr
 

Detailed Description

template<CxxUtils::detail::RefCounted T>
class CxxUtils::RefCountedPtr< T >

Simple smart pointer for Gaudi-style refcounted objects.

Smart pointer maintaining reference counts on an object. The type T must have addRef and release methods.

This is basically the Gaudi SmartIF class with the IInterface dependency removed.

Further note: accessors are not const, and copy/assignment methods take non-const objects. This is to avoid warnings from the thread-safety checker.

Definition at line 38 of file RefCountedPtr.h.

Member Typedef Documentation

◆ element_type

template<CxxUtils::detail::RefCounted T>
using CxxUtils::RefCountedPtr< T >::element_type = T

Definition at line 41 of file RefCountedPtr.h.

Constructor & Destructor Documentation

◆ RefCountedPtr() [1/7]

template<CxxUtils::detail::RefCounted T>
CxxUtils::RefCountedPtr< T >::RefCountedPtr ( )
default

Default constructor.

◆ RefCountedPtr() [2/7]

template<CxxUtils::detail::RefCounted T>
CxxUtils::RefCountedPtr< T >::RefCountedPtr ( T *  p)

Constructor from pointer. Adds to the refcount.

◆ RefCountedPtr() [3/7]

template<CxxUtils::detail::RefCounted T>
template<CxxUtils::detail::RefCounted OTHER>
requires std::convertible_to<OTHER*, T*> CxxUtils::RefCountedPtr< T >::RefCountedPtr ( std::unique_ptr< OTHER > &&  other)

Constructor from unique_ptr. Adds to the refcount.

◆ RefCountedPtr() [4/7]

template<CxxUtils::detail::RefCounted T>
CxxUtils::RefCountedPtr< T >::RefCountedPtr ( const RefCountedPtr< T > &  other)

Copy constructor.

◆ RefCountedPtr() [5/7]

template<CxxUtils::detail::RefCounted T>
CxxUtils::RefCountedPtr< T >::RefCountedPtr ( RefCountedPtr< T > &&  other)

Move constructor.

◆ RefCountedPtr() [6/7]

template<CxxUtils::detail::RefCounted T>
template<CxxUtils::detail::RefCounted OTHER>
requires std::convertible_to<OTHER*, T*> CxxUtils::RefCountedPtr< T >::RefCountedPtr ( const RefCountedPtr< OTHER > &  other)

Constructor from another RefCountedPtr, with a different type.

◆ RefCountedPtr() [7/7]

template<CxxUtils::detail::RefCounted T>
template<CxxUtils::detail::RefCounted OTHER>
requires std::convertible_to<OTHER*, T*> CxxUtils::RefCountedPtr< T >::RefCountedPtr ( RefCountedPtr< OTHER > &&  other)

Move from another RefCountedPtr, with a different type.

◆ ~RefCountedPtr()

template<CxxUtils::detail::RefCounted T>
CxxUtils::RefCountedPtr< T >::~RefCountedPtr ( )

Destructor.

Member Function Documentation

◆ get() [1/2]

template<CxxUtils::detail::RefCounted T>
T* CxxUtils::RefCountedPtr< T >::get ( )

Get the pointer.

◆ get() [2/2]

template<CxxUtils::detail::RefCounted T>
const T* CxxUtils::RefCountedPtr< T >::get ( ) const

◆ isValid()

template<CxxUtils::detail::RefCounted T>
bool CxxUtils::RefCountedPtr< T >::isValid ( ) const

Check if the pointer is valid.

◆ operator bool()

template<CxxUtils::detail::RefCounted T>
CxxUtils::RefCountedPtr< T >::operator bool ( ) const
explicit

Check if the pointer is valid.

◆ operator const T *()

template<CxxUtils::detail::RefCounted T>
CxxUtils::RefCountedPtr< T >::operator const T * ( ) const

◆ operator T*()

template<CxxUtils::detail::RefCounted T>
CxxUtils::RefCountedPtr< T >::operator T* ( )

Convert to pointer.

◆ operator!()

template<CxxUtils::detail::RefCounted T>
bool CxxUtils::RefCountedPtr< T >::operator! ( ) const

Check if the pointer is invalid.

◆ operator*() [1/2]

template<CxxUtils::detail::RefCounted T>
T& CxxUtils::RefCountedPtr< T >::operator* ( )

Dereference.

◆ operator*() [2/2]

template<CxxUtils::detail::RefCounted T>
const T& CxxUtils::RefCountedPtr< T >::operator* ( ) const

◆ operator->() [1/2]

template<CxxUtils::detail::RefCounted T>
T* CxxUtils::RefCountedPtr< T >::operator-> ( )

Dereference.

◆ operator->() [2/2]

template<CxxUtils::detail::RefCounted T>
const T* CxxUtils::RefCountedPtr< T >::operator-> ( ) const

◆ operator=() [1/5]

template<CxxUtils::detail::RefCounted T>
RefCountedPtr& CxxUtils::RefCountedPtr< T >::operator= ( const RefCountedPtr< T > &  other)

Assignment.

◆ operator=() [2/5]

template<CxxUtils::detail::RefCounted T>
template<CxxUtils::detail::RefCounted OTHER>
requires std::convertible_to<OTHER*, T*> RefCountedPtr& CxxUtils::RefCountedPtr< T >::operator= ( const RefCountedPtr< OTHER > &  other)

Assignment from different type.

◆ operator=() [3/5]

template<CxxUtils::detail::RefCounted T>
RefCountedPtr& CxxUtils::RefCountedPtr< T >::operator= ( RefCountedPtr< T > &&  other)

Move.

◆ operator=() [4/5]

template<CxxUtils::detail::RefCounted T>
template<CxxUtils::detail::RefCounted OTHER>
requires std::convertible_to<OTHER*, T*> RefCountedPtr& CxxUtils::RefCountedPtr< T >::operator= ( RefCountedPtr< OTHER > &&  other)

Move from different type.

◆ operator=() [5/5]

template<CxxUtils::detail::RefCounted T>
RefCountedPtr& CxxUtils::RefCountedPtr< T >::operator= ( T *  p)

Assignment from pointer.

◆ release()

template<CxxUtils::detail::RefCounted T>
T* CxxUtils::RefCountedPtr< T >::release ( )
private

◆ reset()

template<CxxUtils::detail::RefCounted T>
void CxxUtils::RefCountedPtr< T >::reset ( T *  ptr = nullptr)

Change the pointer.

Friends And Related Function Documentation

◆ RefCountedPtr

template<CxxUtils::detail::RefCounted T>
template<CxxUtils::detail::RefCounted OTHER>
friend class RefCountedPtr
friend

Definition at line 122 of file RefCountedPtr.h.

Member Data Documentation

◆ m_ptr

template<CxxUtils::detail::RefCounted T>
T* CxxUtils::RefCountedPtr< T >::m_ptr = nullptr
private

Pointer.

Definition at line 128 of file RefCountedPtr.h.


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