29 #ifndef JUCE_SHAREDRESOURCEPOINTER_H_INCLUDED
30 #define JUCE_SHAREDRESOURCEPOINTER_H_INCLUDED
85 template <
typename SharedObjectType>
111 SharedObjectHolder& holder = getSharedObjectHolder();
114 if (--(holder.refCount) == 0)
115 holder.sharedInstance =
nullptr;
119 operator SharedObjectType*()
const noexcept {
return sharedObject; }
122 SharedObjectType&
get()
const noexcept {
return *sharedObject; }
139 static SharedObjectHolder& getSharedObjectHolder()
noexcept
141 static void* holder [(
sizeof (SharedObjectHolder) +
sizeof(
void*) - 1) /
sizeof(
void*)] = { 0 };
142 return *
reinterpret_cast<SharedObjectHolder*
> (holder);
145 SharedObjectType* sharedObject;
149 SharedObjectHolder& holder = getSharedObjectHolder();
152 if (++(holder.refCount) == 1)
153 holder.sharedInstance =
new SharedObjectType();
155 sharedObject = holder.sharedInstance;
166 #endif // JUCE_SHAREDRESOURCEPOINTER_H_INCLUDED
#define noexcept
Definition: juce_CompilerSupport.h:141
Definition: juce_ScopedLock.h:59
SharedResourcePointer(const SharedResourcePointer &)
Definition: juce_SharedResourcePointer.h:100
SharedResourcePointer()
Definition: juce_SharedResourcePointer.h:95
Definition: juce_SpinLock.h:46
~SharedResourcePointer()
Definition: juce_SharedResourcePointer.h:109
SharedObjectType & getObject() const noexcept
Definition: juce_SharedResourcePointer.h:127
Definition: juce_ReferenceCountedObject.h:65
Definition: juce_ScopedPointer.h:70
#define JUCE_DELETED_FUNCTION
Definition: juce_CompilerSupport.h:133
#define JUCE_LEAK_DETECTOR(OwnerClass)
Definition: juce_LeakedObjectDetector.h:141
SharedObjectType * operator->() const noexcept
Definition: juce_SharedResourcePointer.h:129
Definition: juce_SharedResourcePointer.h:86