OpenShot Audio Library | OpenShotAudio 0.3.2
Loading...
Searching...
No Matches
juce::WeakReference< ObjectType, ReferenceCountingType > Class Template Reference

#include <juce_WeakReference.h>

Classes

class  Master
 
class  SharedPointer
 

Public Types

using SharedRef = ReferenceCountedObjectPtr< SharedPointer >
 

Public Member Functions

 WeakReference ()=default
 
 WeakReference (ObjectType *object)
 
 WeakReference (const WeakReference &other) noexcept
 
 WeakReference (WeakReference &&other) noexcept
 
WeakReferenceoperator= (const WeakReference &other)
 
WeakReferenceoperator= (ObjectType *newObject)
 
WeakReferenceoperator= (WeakReference &&other) noexcept
 
ObjectTypeget () const noexcept
 
 operator ObjectType * () const noexcept
 
ObjectTypeoperator-> () const noexcept
 
bool wasObjectDeleted () const noexcept
 
bool operator== (ObjectType *object) const noexcept
 
bool operator!= (ObjectType *object) const noexcept
 

Detailed Description

template<class ObjectType, class ReferenceCountingType = ReferenceCountedObject>
class juce::WeakReference< ObjectType, ReferenceCountingType >

This class acts as a pointer which will automatically become null if the object to which it points is deleted.

To accomplish this, the source object needs to cooperate by performing a couple of simple tasks. It must embed a WeakReference::Master object, which stores a shared pointer object, and must clear this master pointer in its destructor.

Note that WeakReference is not designed to be thread-safe, so if you're accessing it from different threads, you'll need to do your own locking around all uses of the pointer and the object it refers to.

E.g.

class MyObject
{
public:
MyObject() {}
{
// This will zero all the references - you need to call this in your destructor.
masterReference.clear();
}
private:
// You need to embed a variable of this type, with the name "masterReference" inside your object. If the
// variable is not public, you should make your class a friend of WeakReference<MyObject> so that the
// WeakReference class can access it.
WeakReference<MyObject>::Master masterReference;
friend class WeakReference<MyObject>;
};
OR: just use the handy JUCE_DECLARE_WEAK_REFERENCEABLE macro to do all this for you.
// Here's an example of using a pointer..
auto* n = new MyObject();
WeakReference<MyObject> myObjectRef = n;
auto pointer1 = myObjectRef.get(); // returns a valid pointer to 'n'
delete n;
auto pointer2 = myObjectRef.get(); // now returns nullptr
void clear()
Definition juce_Array.h:188
See also
WeakReference::Master

Definition at line 77 of file juce_WeakReference.h.

Member Typedef Documentation

◆ SharedRef

template<class ObjectType , class ReferenceCountingType = ReferenceCountedObject>
using juce::WeakReference< ObjectType, ReferenceCountingType >::SharedRef = ReferenceCountedObjectPtr<SharedPointer>

Definition at line 141 of file juce_WeakReference.h.

Constructor & Destructor Documentation

◆ WeakReference() [1/4]

template<class ObjectType , class ReferenceCountingType = ReferenceCountedObject>
juce::WeakReference< ObjectType, ReferenceCountingType >::WeakReference ( )
inlinedefault

Creates a null WeakReference.

◆ WeakReference() [2/4]

template<class ObjectType , class ReferenceCountingType = ReferenceCountedObject>
juce::WeakReference< ObjectType, ReferenceCountingType >::WeakReference ( ObjectType object)
inline

Creates a WeakReference that points at the given object.

Definition at line 84 of file juce_WeakReference.h.

◆ WeakReference() [3/4]

template<class ObjectType , class ReferenceCountingType = ReferenceCountedObject>
juce::WeakReference< ObjectType, ReferenceCountingType >::WeakReference ( const WeakReference< ObjectType, ReferenceCountingType > &  other)
inlinenoexcept

Creates a copy of another WeakReference.

Definition at line 87 of file juce_WeakReference.h.

◆ WeakReference() [4/4]

template<class ObjectType , class ReferenceCountingType = ReferenceCountedObject>
juce::WeakReference< ObjectType, ReferenceCountingType >::WeakReference ( WeakReference< ObjectType, ReferenceCountingType > &&  other)
inlinenoexcept

Move constructor

Definition at line 90 of file juce_WeakReference.h.

Member Function Documentation

◆ get()

template<class ObjectType , class ReferenceCountingType = ReferenceCountedObject>
ObjectType * juce::WeakReference< ObjectType, ReferenceCountingType >::get ( ) const
inlinenoexcept

Returns the object that this pointer refers to, or null if the object no longer exists.

Definition at line 102 of file juce_WeakReference.h.

Referenced by juce::WeakReference< juce::ActionBroadcaster >::operator juce::ActionBroadcaster *(), and juce::WeakReference< ObjectType, ReferenceCountingType >::operator->().

◆ operator ObjectType *()

template<class ObjectType , class ReferenceCountingType = ReferenceCountedObject>
juce::WeakReference< ObjectType, ReferenceCountingType >::operator ObjectType * ( ) const
inlinenoexcept

Returns the object that this pointer refers to, or null if the object no longer exists.

Definition at line 105 of file juce_WeakReference.h.

◆ operator!=()

template<class ObjectType , class ReferenceCountingType = ReferenceCountedObject>
bool juce::WeakReference< ObjectType, ReferenceCountingType >::operator!= ( ObjectType object) const
inlinenoexcept

Definition at line 120 of file juce_WeakReference.h.

◆ operator->()

template<class ObjectType , class ReferenceCountingType = ReferenceCountedObject>
ObjectType * juce::WeakReference< ObjectType, ReferenceCountingType >::operator-> ( ) const
inlinenoexcept

Returns the object that this pointer refers to, or null if the object no longer exists.

Definition at line 108 of file juce_WeakReference.h.

◆ operator=() [1/3]

template<class ObjectType , class ReferenceCountingType = ReferenceCountedObject>
WeakReference & juce::WeakReference< ObjectType, ReferenceCountingType >::operator= ( const WeakReference< ObjectType, ReferenceCountingType > &  other)
inline

Copies another pointer to this one.

Definition at line 93 of file juce_WeakReference.h.

◆ operator=() [2/3]

template<class ObjectType , class ReferenceCountingType = ReferenceCountedObject>
WeakReference & juce::WeakReference< ObjectType, ReferenceCountingType >::operator= ( ObjectType newObject)
inline

Copies another pointer to this one.

Definition at line 96 of file juce_WeakReference.h.

◆ operator=() [3/3]

template<class ObjectType , class ReferenceCountingType = ReferenceCountedObject>
WeakReference & juce::WeakReference< ObjectType, ReferenceCountingType >::operator= ( WeakReference< ObjectType, ReferenceCountingType > &&  other)
inlinenoexcept

Move assignment operator

Definition at line 99 of file juce_WeakReference.h.

◆ operator==()

template<class ObjectType , class ReferenceCountingType = ReferenceCountedObject>
bool juce::WeakReference< ObjectType, ReferenceCountingType >::operator== ( ObjectType object) const
inlinenoexcept

Definition at line 119 of file juce_WeakReference.h.

◆ wasObjectDeleted()

template<class ObjectType , class ReferenceCountingType = ReferenceCountedObject>
bool juce::WeakReference< ObjectType, ReferenceCountingType >::wasObjectDeleted ( ) const
inlinenoexcept

This returns true if this reference has been pointing at an object, but that object has since been deleted.

If this reference was only ever pointing at a null pointer, this will return false. Using operator=() to make this refer to a different object will reset this flag to match the status of the reference from which you're copying.

Definition at line 117 of file juce_WeakReference.h.


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