singleton.h 978 B

123456789101112131415161718192021222324252627282930313233343536
  1. #ifndef HV_SINGLETON_H_
  2. #define HV_SINGLETON_H_
  3. #include <mutex>
  4. #define DISABLE_COPY(Class) \
  5. Class(const Class&) = delete; \
  6. Class& operator=(const Class&) = delete;
  7. #define SINGLETON_DECL(Class) \
  8. public: \
  9. static Class* instance(); \
  10. static void exitInstance(); \
  11. private: \
  12. DISABLE_COPY(Class) \
  13. static Class* s_pInstance; \
  14. static std::once_flag s_initFlag; \
  15. static std::mutex s_mutex;
  16. #define SINGLETON_IMPL(Class) \
  17. Class* Class::s_pInstance = NULL; \
  18. std::once_flag Class::s_initFlag; \
  19. std::mutex Class::s_mutex; \
  20. Class* Class::instance() { \
  21. std::call_once(s_initFlag, []() {s_pInstance = new Class;}); \
  22. return s_pInstance; \
  23. } \
  24. void Class::exitInstance() { \
  25. std::lock_guard<std::mutex> lock(s_mutex); \
  26. if (s_pInstance) { \
  27. delete s_pInstance; \
  28. s_pInstance = nullptr; \
  29. } \
  30. }
  31. #endif // HV_SINGLETON_H_