80template <
typename SharedObjectType>
105 operator SharedObjectType*() const noexcept {
return sharedObject.get(); }
108 SharedObjectType&
get() const noexcept {
return *sharedObject; }
111 SharedObjectType&
getObject() const noexcept {
return *sharedObject; }
114 SharedObjectType*
operator->() const noexcept {
return sharedObject.get(); }
117 SharedObjectType&
operator*() const noexcept {
return *sharedObject; }
120 [[deprecated (
"If you are relying on this function please inform the JUCE team as we are planing on removing this in a subsequent release")]]
121 int getReferenceCount() const noexcept {
return (
int) sharedObject.use_count(); }
127 if (
auto sharedPtr = weak().lock())
135 : sharedObject (std::move (other))
137 jassert (sharedObject !=
nullptr);
143 std::shared_ptr<SharedObjectType> lock()
149 std::shared_ptr<SharedObjectType> lockOrCreate()
153 if (
auto locked = ptr.lock())
156 const std::shared_ptr<SharedObjectType> shared (
new SharedObjectType());
163 std::weak_ptr<SharedObjectType> ptr;
166 inline static Weak& weak()
172 std::shared_ptr<SharedObjectType> sharedObject = weak().lockOrCreate();
SharedResourcePointer(SharedResourcePointer &&) noexcept=default
SharedObjectType & getObject() const noexcept
SharedResourcePointer()=default
SharedResourcePointer(const SharedResourcePointer &)=default
SharedObjectType & operator*() const noexcept
SharedObjectType & get() const noexcept
static std::optional< SharedResourcePointer > getSharedObjectWithoutCreating()
SharedObjectType * operator->() const noexcept
GenericScopedLock< SpinLock > ScopedLockType