diff --git a/modules/juce_core/memory/juce_ReferenceCountedObject.h b/modules/juce_core/memory/juce_ReferenceCountedObject.h index 052e136dc3..5088ce65cc 100644 --- a/modules/juce_core/memory/juce_ReferenceCountedObject.h +++ b/modules/juce_core/memory/juce_ReferenceCountedObject.h @@ -99,6 +99,15 @@ protected: /** Creates the reference-counted object (with an initial ref count of zero). */ ReferenceCountedObject() {} + /** Copying from another object does not affect this one's reference-count. */ + ReferenceCountedObject (const ReferenceCountedObject&) noexcept {} + /** Copying from another object does not affect this one's reference-count. */ + ReferenceCountedObject (ReferenceCountedObject&&) noexcept {} + /** Copying from another object does not affect this one's reference-count. */ + ReferenceCountedObject& operator= (const ReferenceCountedObject&) noexcept { return *this; } + /** Copying from another object does not affect this one's reference-count. */ + ReferenceCountedObject& operator= (ReferenceCountedObject&&) noexcept { return *this; } + /** Destructor. */ virtual ~ReferenceCountedObject() { @@ -116,10 +125,8 @@ protected: private: //============================================================================== - Atomic refCount; - + Atomic refCount { 0 }; friend struct ContainerDeletePolicy; - JUCE_DECLARE_NON_COPYABLE (ReferenceCountedObject) }; @@ -176,7 +183,16 @@ public: protected: //============================================================================== /** Creates the reference-counted object (with an initial ref count of zero). */ - SingleThreadedReferenceCountedObject() : refCount (0) {} + SingleThreadedReferenceCountedObject() {} + + /** Copying from another object does not affect this one's reference-count. */ + SingleThreadedReferenceCountedObject (const SingleThreadedReferenceCountedObject&) {} + /** Copying from another object does not affect this one's reference-count. */ + SingleThreadedReferenceCountedObject (SingleThreadedReferenceCountedObject&&) {} + /** Copying from another object does not affect this one's reference-count. */ + SingleThreadedReferenceCountedObject& operator= (const SingleThreadedReferenceCountedObject&) { return *this; } + /** Copying from another object does not affect this one's reference-count. */ + SingleThreadedReferenceCountedObject& operator= (SingleThreadedReferenceCountedObject&&) { return *this; } /** Destructor. */ virtual ~SingleThreadedReferenceCountedObject() @@ -187,10 +203,8 @@ protected: private: //============================================================================== - int refCount; - + int refCount = 0; friend struct ContainerDeletePolicy; - JUCE_DECLARE_NON_COPYABLE (SingleThreadedReferenceCountedObject) }; @@ -225,10 +239,10 @@ public: //============================================================================== /** Creates a pointer to a null object. */ - ReferenceCountedObjectPtr() noexcept - : referencedObject (nullptr) - { - } + ReferenceCountedObjectPtr() noexcept {} + + /** Creates a pointer to a null object. */ + ReferenceCountedObjectPtr (decltype (nullptr)) noexcept {} /** Creates a pointer to an object. This will increment the object's reference-count. @@ -239,12 +253,6 @@ public: incIfNotNull (refCountedObject); } - /** Creates a pointer to a null object. */ - ReferenceCountedObjectPtr (decltype (nullptr)) noexcept - : referencedObject (nullptr) - { - } - /** Copies another pointer. This will increment the object's reference-count. */ @@ -293,7 +301,7 @@ public: if (referencedObject != newObject) { incIfNotNull (newObject); - ReferencedType* const oldObject = referencedObject; + auto* oldObject = referencedObject; referencedObject = newObject; decIfNotNull (oldObject); } @@ -349,7 +357,7 @@ public: private: //============================================================================== - ReferencedType* referencedObject; + ReferencedType* referencedObject = nullptr; static void incIfNotNull (ReferencedType* o) noexcept {