84 jassert (getReferenceCount() > 0);
96 jassert (getReferenceCount() > 0);
97 return --refCount == 0;
122 jassert (getReferenceCount() == 0);
172 jassert (getReferenceCount() > 0);
184 jassert (getReferenceCount() > 0);
185 return --refCount == 0;
210 jassert (getReferenceCount() == 0);
245 template <
class ObjectType>
250 using ReferencedType = ObjectType;
263 : referencedObject (refCountedObject)
265 incIfNotNull (refCountedObject);
272 : referencedObject (&refCountedObject)
274 refCountedObject.incReferenceCount();
281 : referencedObject (other.referencedObject)
283 incIfNotNull (referencedObject);
288 : referencedObject (other.referencedObject)
290 other.referencedObject =
nullptr;
296 template <
typename Convertible>
298 : referencedObject (other.get())
300 incIfNotNull (referencedObject);
309 return operator= (other.referencedObject);
316 template <
typename Convertible>
319 return operator= (other.
get());
329 if (newObject !=
nullptr)
330 return operator= (*newObject);
343 if (referencedObject != &newObject)
345 newObject.incReferenceCount();
346 auto* oldObject = referencedObject;
347 referencedObject = &newObject;
348 decIfNotNull (oldObject);
364 std::swap (referencedObject, other.referencedObject);
374 decIfNotNull (referencedObject);
381 ReferencedType*
get()
const noexcept {
return referencedObject; }
386 auto oldObject = referencedObject;
387 referencedObject =
nullptr;
388 decIfNotNull (oldObject);
392 ReferencedType* operator->()
const noexcept
394 jassert (referencedObject !=
nullptr);
395 return referencedObject;
401 ReferencedType&
operator*() const noexcept { jassert (referencedObject !=
nullptr);
return *referencedObject; }
404 bool operator== (decltype (
nullptr)) const noexcept {
return referencedObject ==
nullptr; }
406 bool operator!= (decltype (
nullptr)) const noexcept {
return referencedObject !=
nullptr; }
409 bool operator== (
const ObjectType* other)
const noexcept {
return referencedObject == other; }
413 bool operator!= (
const ObjectType* other)
const noexcept {
return referencedObject != other; }
417 #if JUCE_STRICT_REFCOUNTEDPOINTER 419 explicit operator bool()
const noexcept {
return referencedObject !=
nullptr; }
428 operator ReferencedType*()
const noexcept {
return referencedObject; }
433 JUCE_DEPRECATED_WITH_BODY (ReferencedType* getObject()
const, {
return get(); })
437 ReferencedType* referencedObject =
nullptr;
439 static void incIfNotNull (ReferencedType* o) noexcept
442 o->incReferenceCount();
445 static void decIfNotNull (ReferencedType* o) noexcept
447 if (o !=
nullptr && o->decReferenceCountWithoutDeleting())
455 template <
typename Type>
458 return object1 == object2.
get();
462 template <
typename Type>
465 return object1 != object2.
get();
bool decReferenceCountWithoutDeleting() noexcept
ReferenceCountedObjectPtr(ReferenceCountedObjectPtr &&other) noexcept
void decReferenceCount() noexcept
int getReferenceCount() const noexcept
ReferenceCountedObjectPtr(const ReferenceCountedObjectPtr &other) noexcept
virtual ~SingleThreadedReferenceCountedObject()
void decReferenceCount() noexcept
void incReferenceCount() noexcept
ReferenceCountedObject(ReferenceCountedObject &&) noexcept
int getReferenceCount() const noexcept
SingleThreadedReferenceCountedObject(const SingleThreadedReferenceCountedObject &)
void incReferenceCount() noexcept
ReferencedType & operator*() const noexcept
void resetReferenceCount() noexcept
SingleThreadedReferenceCountedObject(SingleThreadedReferenceCountedObject &&)
ReferencedType * get() const noexcept
~ReferenceCountedObjectPtr()
virtual ~ReferenceCountedObject()
ReferenceCountedObjectPtr(decltype(nullptr)) noexcept
ReferenceCountedObjectPtr(ReferencedType *refCountedObject) noexcept
bool decReferenceCountWithoutDeleting() noexcept
ReferenceCountedObject(const ReferenceCountedObject &) noexcept
ReferenceCountedObjectPtr(const ReferenceCountedObjectPtr< Convertible > &other) noexcept
ReferenceCountedObjectPtr(ReferencedType &refCountedObject) noexcept