88 jassert (getReferenceCount() > 0);
100 jassert (getReferenceCount() > 0);
101 return --refCount == 0;
126 jassert (getReferenceCount() == 0);
176 jassert (getReferenceCount() > 0);
188 jassert (getReferenceCount() > 0);
189 return --refCount == 0;
214 jassert (getReferenceCount() == 0);
249 template <
class ObjectType>
254 using ReferencedType = ObjectType;
267 : referencedObject (refCountedObject)
269 incIfNotNull (refCountedObject);
276 : referencedObject (&refCountedObject)
278 refCountedObject.incReferenceCount();
285 : referencedObject (other.referencedObject)
287 incIfNotNull (referencedObject);
292 : referencedObject (other.referencedObject)
294 other.referencedObject =
nullptr;
300 template <
typename Convertible>
302 : referencedObject (other.get())
304 incIfNotNull (referencedObject);
313 return operator= (other.referencedObject);
320 template <
typename Convertible>
323 return operator= (other.
get());
333 if (newObject !=
nullptr)
334 return operator= (*newObject);
347 if (referencedObject != &newObject)
349 newObject.incReferenceCount();
350 auto* oldObject = referencedObject;
351 referencedObject = &newObject;
352 decIfNotNull (oldObject);
368 std::swap (referencedObject, other.referencedObject);
378 decIfNotNull (referencedObject);
385 ReferencedType*
get()
const noexcept {
return referencedObject; }
390 auto oldObject = referencedObject;
391 referencedObject =
nullptr;
392 decIfNotNull (oldObject);
396 ReferencedType* operator->()
const noexcept
398 jassert (referencedObject !=
nullptr);
399 return referencedObject;
405 ReferencedType&
operator*() const noexcept { jassert (referencedObject !=
nullptr);
return *referencedObject; }
408 bool operator== (decltype (
nullptr)) const noexcept {
return referencedObject ==
nullptr; }
410 bool operator!= (decltype (
nullptr)) const noexcept {
return referencedObject !=
nullptr; }
413 bool operator== (
const ObjectType* other)
const noexcept {
return referencedObject == other; }
417 bool operator!= (
const ObjectType* other)
const noexcept {
return referencedObject != other; }
421 #if JUCE_STRICT_REFCOUNTEDPOINTER 423 explicit operator bool()
const noexcept {
return referencedObject !=
nullptr; }
432 operator ReferencedType*()
const noexcept {
return referencedObject; }
437 JUCE_DEPRECATED_WITH_BODY (ReferencedType* getObject()
const, {
return get(); })
441 ReferencedType* referencedObject =
nullptr;
443 static void incIfNotNull (ReferencedType* o) noexcept
446 o->incReferenceCount();
449 static void decIfNotNull (ReferencedType* o) noexcept
451 if (o !=
nullptr && o->decReferenceCountWithoutDeleting())
459 template <
typename Type>
462 return object1 == object2.
get();
466 template <
typename Type>
469 return object1 != object2.
get();
#define JUCE_API
This macro is added to all JUCE public class declarations.
bool decReferenceCountWithoutDeleting() noexcept
Decreases the object's reference count.
ReferenceCountedObjectPtr(ReferenceCountedObjectPtr &&other) noexcept
Takes-over the object from another pointer.
void decReferenceCount() noexcept
Decreases the object's reference count.
int getReferenceCount() const noexcept
Returns the object's current reference count.
ReferenceCountedObjectPtr(const ReferenceCountedObjectPtr &other) noexcept
Copies another pointer.
virtual ~SingleThreadedReferenceCountedObject()
Destructor.
void reset() noexcept
Resets this object to a null pointer.
void decReferenceCount() noexcept
Decreases the object's reference count.
void incReferenceCount() noexcept
Increments the object's reference count.
ReferenceCountedObject(ReferenceCountedObject &&) noexcept
Copying from another object does not affect this one's reference-count.
int getReferenceCount() const noexcept
Returns the object's current reference count.
SingleThreadedReferenceCountedObject(const SingleThreadedReferenceCountedObject &)
Copying from another object does not affect this one's reference-count.
void incReferenceCount() noexcept
Increments the object's reference count.
ReferencedType & operator*() const noexcept
Dereferences the object that this pointer references.
void resetReferenceCount() noexcept
Resets the reference count to zero without deleting the object.
SingleThreadedReferenceCountedObject(SingleThreadedReferenceCountedObject &&)
Copying from another object does not affect this one's reference-count.
ReferencedType * get() const noexcept
Returns the object that this pointer references.
~ReferenceCountedObjectPtr()
Destructor.
Used by container classes as an indirect way to delete an object of a particular type.
Adds reference-counting to an object.
virtual ~ReferenceCountedObject()
Destructor.
ReferenceCountedObjectPtr(decltype(nullptr)) noexcept
Creates a pointer to a null object.
A smart-pointer class which points to a reference-counted object.
ReferenceCountedObjectPtr(ReferencedType *refCountedObject) noexcept
Creates a pointer to an object.
A base class which provides methods for reference-counting.
bool decReferenceCountWithoutDeleting() noexcept
Decreases the object's reference count.
ReferenceCountedObject(const ReferenceCountedObject &) noexcept
Copying from another object does not affect this one's reference-count.
ReferenceCountedObjectPtr(const ReferenceCountedObjectPtr< Convertible > &other) noexcept
Copies another pointer.
ReferenceCountedObjectPtr(ReferencedType &refCountedObject) noexcept
Creates a pointer to an object.