LMMS
Loading...
Searching...
No Matches
water::ReferenceCountedObjectPtr< ReferenceCountedObjectClass > Class Template Reference

#include <ReferenceCountedObject.h>

Public Types

typedef ReferenceCountedObjectClass ReferencedType

Public Member Functions

 ReferenceCountedObjectPtr () noexcept
 ReferenceCountedObjectPtr (ReferencedType *refCountedObject) noexcept
 ReferenceCountedObjectPtr (const ReferenceCountedObjectPtr &other) noexcept
template<typename Convertible>
 ReferenceCountedObjectPtr (const ReferenceCountedObjectPtr< Convertible > &other) noexcept
ReferenceCountedObjectPtroperator= (const ReferenceCountedObjectPtr &other)
template<typename Convertible>
ReferenceCountedObjectPtroperator= (const ReferenceCountedObjectPtr< Convertible > &other)
ReferenceCountedObjectPtroperator= (ReferencedType *const newObject)
 ~ReferenceCountedObjectPtr ()
 operator ReferencedType * () const noexcept
ReferencedTypeget () const noexcept
ReferencedTypegetObject () const noexcept
ReferencedTypeoperator-> () const noexcept

Static Private Member Functions

static void incIfNotNull (ReferencedType *o) noexcept
static void decIfNotNull (ReferencedType *o) noexcept

Private Attributes

ReferencedTypereferencedObject

Detailed Description

template<class ReferenceCountedObjectClass>
class water::ReferenceCountedObjectPtr< ReferenceCountedObjectClass >

A smart-pointer class which points to a reference-counted object.

The template parameter specifies the class of the object you want to point to - the easiest way to make a class reference-countable is to simply make it inherit from ReferenceCountedObject or SingleThreadedReferenceCountedObject, but if you need to, you can roll your own reference-countable class by implementing a set of methods called incReferenceCount(), decReferenceCount(), and decReferenceCountWithoutDeleting(). See ReferenceCountedObject for examples of how these methods should behave.

When using this class, you'll probably want to create a typedef to abbreviate the full templated name - e.g.

struct MyClass : public ReferenceCountedObject
{
...
Definition ReferenceCountedObject.h:66
ReferenceCountedObjectPtr() noexcept
Definition ReferenceCountedObject.h:234
See also
ReferenceCountedObject, ReferenceCountedObjectArray

Member Typedef Documentation

◆ ReferencedType

template<class ReferenceCountedObjectClass>
typedef ReferenceCountedObjectClass water::ReferenceCountedObjectPtr< ReferenceCountedObjectClass >::ReferencedType

The class being referenced by this pointer.

Constructor & Destructor Documentation

◆ ReferenceCountedObjectPtr() [1/4]

template<class ReferenceCountedObjectClass>
water::ReferenceCountedObjectPtr< ReferenceCountedObjectClass >::ReferenceCountedObjectPtr ( )
inlinenoexcept

Creates a pointer to a null object.

◆ ReferenceCountedObjectPtr() [2/4]

template<class ReferenceCountedObjectClass>
water::ReferenceCountedObjectPtr< ReferenceCountedObjectClass >::ReferenceCountedObjectPtr ( ReferencedType * refCountedObject)
inlinenoexcept

Creates a pointer to an object. This will increment the object's reference-count.

◆ ReferenceCountedObjectPtr() [3/4]

template<class ReferenceCountedObjectClass>
water::ReferenceCountedObjectPtr< ReferenceCountedObjectClass >::ReferenceCountedObjectPtr ( const ReferenceCountedObjectPtr< ReferenceCountedObjectClass > & other)
inlinenoexcept

Copies another pointer. This will increment the object's reference-count.

◆ ReferenceCountedObjectPtr() [4/4]

template<class ReferenceCountedObjectClass>
template<typename Convertible>
water::ReferenceCountedObjectPtr< ReferenceCountedObjectClass >::ReferenceCountedObjectPtr ( const ReferenceCountedObjectPtr< Convertible > & other)
inlinenoexcept

Copies another pointer. This will increment the object's reference-count (if it is non-null).

◆ ~ReferenceCountedObjectPtr()

template<class ReferenceCountedObjectClass>
water::ReferenceCountedObjectPtr< ReferenceCountedObjectClass >::~ReferenceCountedObjectPtr ( )
inline

Destructor. This will decrement the object's reference-count, which will cause the object to be deleted when the ref-count hits zero.

Member Function Documentation

◆ decIfNotNull()

template<class ReferenceCountedObjectClass>
void water::ReferenceCountedObjectPtr< ReferenceCountedObjectClass >::decIfNotNull ( ReferencedType * o)
inlinestaticprivatenoexcept

◆ get()

template<class ReferenceCountedObjectClass>
ReferencedType * water::ReferenceCountedObjectPtr< ReferenceCountedObjectClass >::get ( ) const
inlinenoexcept

Returns the object that this pointer references. The pointer returned may be null, of course.

◆ getObject()

template<class ReferenceCountedObjectClass>
ReferencedType * water::ReferenceCountedObjectPtr< ReferenceCountedObjectClass >::getObject ( ) const
inlinenoexcept

Returns the object that this pointer references. The pointer returned may be null, of course.

◆ incIfNotNull()

template<class ReferenceCountedObjectClass>
void water::ReferenceCountedObjectPtr< ReferenceCountedObjectClass >::incIfNotNull ( ReferencedType * o)
inlinestaticprivatenoexcept

◆ operator ReferencedType *()

template<class ReferenceCountedObjectClass>
water::ReferenceCountedObjectPtr< ReferenceCountedObjectClass >::operator ReferencedType * ( ) const
inlinenoexcept

Returns the object that this pointer references. The pointer returned may be null, of course.

◆ operator->()

template<class ReferenceCountedObjectClass>
ReferencedType * water::ReferenceCountedObjectPtr< ReferenceCountedObjectClass >::operator-> ( ) const
inlinenoexcept

◆ operator=() [1/3]

template<class ReferenceCountedObjectClass>
ReferenceCountedObjectPtr & water::ReferenceCountedObjectPtr< ReferenceCountedObjectClass >::operator= ( const ReferenceCountedObjectPtr< ReferenceCountedObjectClass > & other)
inline

Changes this pointer to point at a different object. The reference count of the old object is decremented, and it might be deleted if it hits zero. The new object's count is incremented.

◆ operator=() [2/3]

template<class ReferenceCountedObjectClass>
template<typename Convertible>
ReferenceCountedObjectPtr & water::ReferenceCountedObjectPtr< ReferenceCountedObjectClass >::operator= ( const ReferenceCountedObjectPtr< Convertible > & other)
inline

Changes this pointer to point at a different object. The reference count of the old object is decremented, and it might be deleted if it hits zero. The new object's count is incremented.

◆ operator=() [3/3]

template<class ReferenceCountedObjectClass>
ReferenceCountedObjectPtr & water::ReferenceCountedObjectPtr< ReferenceCountedObjectClass >::operator= ( ReferencedType *const newObject)
inline

Changes this pointer to point at a different object.

The reference count of the old object is decremented, and it might be deleted if it hits zero. The new object's count is incremented.

Member Data Documentation

◆ referencedObject

template<class ReferenceCountedObjectClass>
ReferencedType* water::ReferenceCountedObjectPtr< ReferenceCountedObjectClass >::referencedObject
private

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