84 jassert (getReferenceCount() > 0);
96 jassert (getReferenceCount() > 0);
97 return --refCount == 0;
122 jassert (getReferenceCount() == 0);
136 friend struct ContainerDeletePolicy<ReferenceCountedObject>;
172 jassert (getReferenceCount() > 0);
184 jassert (getReferenceCount() > 0);
185 return --refCount == 0;
210 jassert (getReferenceCount() == 0);
245template <
class 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>
329 if (newObject !=
nullptr)
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);
386 auto oldObject = referencedObject;
387 referencedObject =
nullptr;
388 decIfNotNull (oldObject);
394 jassert (referencedObject !=
nullptr);
395 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; }
442 o->incReferenceCount();
447 if (o !=
nullptr && o->decReferenceCountWithoutDeleting())
448 ContainerDeletePolicy<ReferencedType>::destroy (o);
455template <
typename Type>
456bool operator== (
const Type* object1,
const ReferenceCountedObjectPtr<Type>& object2)
noexcept
458 return object1 == object2.get();
462template <
typename Type>
463bool operator!= (
const Type* object1,
const ReferenceCountedObjectPtr<Type>& object2)
noexcept
465 return object1 != object2.get();
~ReferenceCountedObjectPtr()
ReferenceCountedObjectPtr & operator=(const ReferenceCountedObjectPtr &other)
ObjectType ReferencedType
bool operator!=(decltype(nullptr)) const noexcept
ReferenceCountedObjectPtr(ReferenceCountedObjectPtr &&other) noexcept
bool operator==(decltype(nullptr)) const noexcept
ReferenceCountedObjectPtr(ReferencedType *refCountedObject) noexcept
ReferenceCountedObjectPtr(ReferencedType &refCountedObject) noexcept
ReferenceCountedObjectPtr()=default
ReferenceCountedObjectPtr(const ReferenceCountedObjectPtr< Convertible > &other) noexcept
ReferenceCountedObjectPtr(decltype(nullptr)) noexcept
ReferencedType & operator*() const noexcept
ReferenceCountedObjectPtr(const ReferenceCountedObjectPtr &other) noexcept
ReferencedType * get() const noexcept
ReferenceCountedObject(const ReferenceCountedObject &) noexcept
ReferenceCountedObject(ReferenceCountedObject &&) noexcept
void resetReferenceCount() noexcept
bool decReferenceCountWithoutDeleting() noexcept
ReferenceCountedObject()=default
void incReferenceCount() noexcept
int getReferenceCount() const noexcept
void decReferenceCount() noexcept
virtual ~ReferenceCountedObject()
virtual ~SingleThreadedReferenceCountedObject()
SingleThreadedReferenceCountedObject(SingleThreadedReferenceCountedObject &&)
SingleThreadedReferenceCountedObject(const SingleThreadedReferenceCountedObject &)
SingleThreadedReferenceCountedObject()=default
void decReferenceCount() noexcept
void incReferenceCount() noexcept
int getReferenceCount() const noexcept
bool decReferenceCountWithoutDeleting() noexcept