From 2685604eb37217a032a0355b86e866ecf34be14d Mon Sep 17 00:00:00 2001 From: Anthony Nicholls Date: Fri, 1 Dec 2023 20:52:48 +0000 Subject: [PATCH] SharedResourcePointer: Allow objects with private constructors --- .../juce_core/memory/juce_SharedResourcePointer.h | 2 +- .../memory/juce_SharedResourcePointer_test.cpp | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/modules/juce_core/memory/juce_SharedResourcePointer.h b/modules/juce_core/memory/juce_SharedResourcePointer.h index 6416898247..4355264c88 100644 --- a/modules/juce_core/memory/juce_SharedResourcePointer.h +++ b/modules/juce_core/memory/juce_SharedResourcePointer.h @@ -153,7 +153,7 @@ private: if (auto locked = ptr.lock()) return locked; - auto shared = std::make_shared(); + const std::shared_ptr shared (new SharedObjectType()); ptr = shared; return shared; } diff --git a/modules/juce_core/memory/juce_SharedResourcePointer_test.cpp b/modules/juce_core/memory/juce_SharedResourcePointer_test.cpp index 9cf97c1799..ed431af267 100644 --- a/modules/juce_core/memory/juce_SharedResourcePointer_test.cpp +++ b/modules/juce_core/memory/juce_SharedResourcePointer_test.cpp @@ -79,6 +79,18 @@ public: expect (SharedResourcePointer::getSharedObjectWithoutCreating() == std::nullopt); } + + beginTest ("Create objects with private constructors"); + { + class ObjectWithPrivateConstructor + { + private: + ObjectWithPrivateConstructor() = default; + friend SharedResourcePointer; + }; + + SharedResourcePointer instance; + } } };