WeakReference< ObjectType, ReferenceCountingType > Class Template Reference
juce_core » memory

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

## Classes

class | Master
| This class is embedded inside an object to which you want to attach WeakReference pointers. More...
class | SharedPointer
| This class is used internally by the WeakReference class - don't use it directly in your code! More...

## Public Types

using | SharedRef = ReferenceCountedObjectPtr< SharedPointer >

## Public Member Functions

| WeakReference ()=default
| Creates a null WeakReference. More...
| WeakReference (ObjectType *object)
| Creates a WeakReference that points at the given object. More...
| WeakReference (const WeakReference &other) noexcept
| Creates a copy of another WeakReference. More...
| WeakReference (WeakReference &&other) noexcept
| Move constructor. More...
WeakReference & | operator= (const WeakReference &other)
| Copies another pointer to this one. More...
WeakReference & | operator= (ObjectType *newObject)
| Copies another pointer to this one. More...
WeakReference & | operator= (WeakReference &&other) noexcept
| Move assignment operator. More...
ObjectType * | get () const noexcept
| Returns the object that this pointer refers to, or null if the object no longer exists. More...
| operator ObjectType * () const noexcept
| Returns the object that this pointer refers to, or null if the object no longer exists. More...
ObjectType * | operator-> () const noexcept
| Returns the object that this pointer refers to, or null if the object no longer exists. More...
bool | wasObjectDeleted () const noexcept
| This returns true if this reference has been pointing at an object, but that object has since been deleted. More...
bool | operator== (ObjectType *object) const noexcept
bool | operator!= (ObjectType *object) const noexcept

## Detailed Description

### template<class ObjectType, class ReferenceCountingType = ReferenceCountedObject>
class 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

See also
  WeakReference::Master

## Member Typedef Documentation

## SharedRef

template<class ObjectType, class ReferenceCountingType = ReferenceCountedObject>

using WeakReference< ObjectType, ReferenceCountingType >::SharedRef = ReferenceCountedObjectPtr<SharedPointer>

## Constructor & Destructor Documentation

## WeakReference() [1/4]

template<class ObjectType, class ReferenceCountingType = ReferenceCountedObject>

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

default

Creates a null WeakReference.

## WeakReference() [2/4]

template<class ObjectType, class ReferenceCountingType = ReferenceCountedObject>

WeakReference< ObjectType, ReferenceCountingType >::WeakReference | ( | ObjectType * | object | ) |

Creates a WeakReference that points at the given object.

## WeakReference() [3/4]

template<class ObjectType, class ReferenceCountingType = ReferenceCountedObject>

WeakReference< ObjectType, ReferenceCountingType >::WeakReference | ( | const WeakReference< ObjectType, ReferenceCountingType > & | other | ) |

noexcept

Creates a copy of another WeakReference.

## WeakReference() [4/4]

template<class ObjectType, class ReferenceCountingType = ReferenceCountedObject>

WeakReference< ObjectType, ReferenceCountingType >::WeakReference | ( | WeakReference< ObjectType, ReferenceCountingType > && | other | ) |

noexcept

Move constructor.

## Member Function Documentation

## operator=() [1/3]

template<class ObjectType, class ReferenceCountingType = ReferenceCountedObject>

WeakReference& WeakReference< ObjectType, ReferenceCountingType >::operator= | ( | const WeakReference< ObjectType, ReferenceCountingType > & | other | ) |

Copies another pointer to this one.

## operator=() [2/3]

template<class ObjectType, class ReferenceCountingType = ReferenceCountedObject>

WeakReference& WeakReference< ObjectType, ReferenceCountingType >::operator= | ( | ObjectType * | newObject | ) |

Copies another pointer to this one.

## operator=() [3/3]

template<class ObjectType, class ReferenceCountingType = ReferenceCountedObject>

WeakReference& WeakReference< ObjectType, ReferenceCountingType >::operator= | ( | WeakReference< ObjectType, ReferenceCountingType > && | other | ) |

noexcept

Move assignment operator.

## get()

template<class ObjectType, class ReferenceCountingType = ReferenceCountedObject>

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

noexcept

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

Referenced by ModalCallbackFunction::forComponent(), WeakReference< ValueWithDefault >::operator ValueWithDefault *(), WeakReference< LookAndFeel >::operator!=(), WeakReference< LookAndFeel >::operator->(), and WeakReference< LookAndFeel >::operator==().

## operator ObjectType *()

template<class ObjectType, class ReferenceCountingType = ReferenceCountedObject>

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

noexcept

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

## operator->()

template<class ObjectType, class ReferenceCountingType = ReferenceCountedObject>

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

noexcept

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

## wasObjectDeleted()

template<class ObjectType, class ReferenceCountingType = ReferenceCountedObject>

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

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.

## operator==()

template<class ObjectType, class ReferenceCountingType = ReferenceCountedObject>

bool WeakReference< ObjectType, ReferenceCountingType >::operator== | ( | ObjectType * | object | ) | const

noexcept

## operator!=()

template<class ObjectType, class ReferenceCountingType = ReferenceCountedObject>

bool WeakReference< ObjectType, ReferenceCountingType >::operator!= | ( | ObjectType * | object | ) | const

noexcept

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

- juce_WeakReference.h

JUCE_DECLARE_WEAK_REFERENCEABLE
#define JUCE_DECLARE_WEAK_REFERENCEABLE(Class)
Macro to easily allow a class to be made weak-referenceable.
Definition: juce_WeakReference.h:235
WeakReference::get
ObjectType * get() const noexcept
Returns the object that this pointer refers to, or null if the object no longer exists.
Definition: juce_WeakReference.h:103
WeakReference::Master
This class is embedded inside an object to which you want to attach WeakReference pointers.
Definition: juce_WeakReference.h:150
WeakReference
This class acts as a pointer which will automatically become null if the object to which it points is...
Definition: juce_WeakReference.h:78