Loading...
Searching...
No Matches
juce::WeakReference< ObjectType, ReferenceCountingType > Class Template Reference

`#include <juce_WeakReference.h>`

## Classes

class | SharedPointer
class | Master

## Public Types

using | SharedRef = ReferenceCountedObjectPtr<SharedPointer>

## Public Member Functions

| WeakReference ()=default
| WeakReference (ObjectType *object)
| WeakReference (const WeakReference &other) noexcept
| WeakReference (WeakReference &&other) noexcept
WeakReference & | operator= (const WeakReference &other)
WeakReference & | operator= (ObjectType *newObject)
WeakReference & | operator= (WeakReference &&other) noexcept
ObjectType * | get () const noexcept
| operator ObjectType * () const noexcept
ObjectType * | operator-> () const noexcept
bool | wasObjectDeleted () 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() {}
~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
juce::WeakReference::WeakReference
WeakReference()=default

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 138 of file juce_WeakReference.h.

## Constructor & Destructor Documentation

## WeakReference() [1/4]

template<class ObjectType, class ReferenceCountingType = ReferenceCountedObject>

juce::WeakReference< ObjectType, ReferenceCountingType >::WeakReference | ( |  | ) |

inline default

Creates a null WeakReference.

Referenced by operator=(), operator=(), operator=(), WeakReference(), and 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 | ) |

inline noexcept

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 | ) |

inline noexcept

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

inline noexcept

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 operator->().

## operator ObjectType *()

template<class ObjectType, class ReferenceCountingType = ReferenceCountedObject>

juce::WeakReference< ObjectType, ReferenceCountingType >::operator ObjectType * | ( |  | ) | const

inline noexcept

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>

ObjectType * juce::WeakReference< ObjectType, ReferenceCountingType >::operator-> | ( |  | ) | const

inline noexcept

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 | ) |

inline noexcept

Move assignment operator

Definition at line 99 of file juce_WeakReference.h.

## wasObjectDeleted()

template<class ObjectType, class ReferenceCountingType = ReferenceCountedObject>

bool juce::WeakReference< ObjectType, ReferenceCountingType >::wasObjectDeleted | ( |  | ) | const

inline noexcept

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:

- juce_WeakReference.h