Skip to content

Commit

Permalink
thread safe singleton
Browse files Browse the repository at this point in the history
  • Loading branch information
chrxh committed Oct 19, 2024
1 parent 106cead commit 2e87ac4
Showing 1 changed file with 19 additions and 8 deletions.
27 changes: 19 additions & 8 deletions source/Base/Singleton.h
Original file line number Diff line number Diff line change
@@ -1,32 +1,43 @@
#pragma once

#include <memory>
#include <mutex>

#define MAKE_SINGLETON(ClassName) \
public: \
static ClassName& get() \
{ \
static ClassName instance; \
return instance; \
static std::unique_ptr<ClassName> instance; \
static std::mutex mutex; \
if (!instance) { \
std::lock_guard<std::mutex> lock(mutex); \
instance = std::unique_ptr<ClassName>(new ClassName); \
} \
return *instance.get(); \
} \
\
private: \
ClassName() = default; \
~ClassName() = default; \
ClassName(ClassName const&) = delete; \
ClassName& operator=(ClassName const&) = delete; \
ClassName(ClassName&&) = delete; \
ClassName& operator=(ClassName const&) = delete; \
ClassName& operator=(ClassName&&) = delete

#define MAKE_SINGLETON_CUSTOMIZED(ClassName) \
public: \
static ClassName& get() \
{ \
static ClassName instance; \
return instance; \
static std::unique_ptr<ClassName> instance; \
static std::mutex mutex; \
if (!instance) { \
std::lock_guard<std::mutex> lock(mutex); \
instance = std::unique_ptr<ClassName>(new ClassName); \
} \
return *instance.get(); \
} \
\
private: \
~ClassName() = default; \
ClassName(ClassName const&) = delete; \
ClassName& operator=(ClassName const&) = delete; \
ClassName(ClassName&&) = delete; \
ClassName& operator=(ClassName const&) = delete; \
ClassName& operator=(ClassName&&) = delete

0 comments on commit 2e87ac4

Please sign in to comment.