106 auto& holder = getSharedObjectHolder();
109 if (--(holder.refCount) == 0)
110 holder.sharedInstance =
nullptr;
131 struct SharedObjectHolder
134 std::unique_ptr<SharedObjectType> sharedInstance;
138 static SharedObjectHolder& getSharedObjectHolder() noexcept
140 static void* holder [(
sizeof (SharedObjectHolder) +
sizeof(
void*) - 1) /
sizeof(
void*)] = {
nullptr };
141 return *
reinterpret_cast<SharedObjectHolder*
> (holder);
144 SharedObjectType* sharedObject;
148 auto& holder = getSharedObjectHolder();
151 if (++(holder.refCount) == 1)
152 holder.sharedInstance.reset (
new SharedObjectType());
154 sharedObject = holder.sharedInstance.get();