singleton.h 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  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::mutex s_mutex;
  15. #define SINGLETON_IMPL(Class) \
  16. Class* Class::s_pInstance = NULL; \
  17. std::mutex Class::s_mutex; \
  18. Class* Class::instance() { \
  19. if (s_pInstance == NULL) { \
  20. s_mutex.lock(); \
  21. if (s_pInstance == NULL) { \
  22. s_pInstance = new Class; \
  23. } \
  24. s_mutex.unlock(); \
  25. } \
  26. return s_pInstance; \
  27. } \
  28. void Class::exitInstance() { \
  29. s_mutex.lock(); \
  30. if (s_pInstance) { \
  31. delete s_pInstance; \
  32. s_pInstance = NULL; \
  33. } \
  34. s_mutex.unlock(); \
  35. }
  36. #endif // HV_SINGLETON_H_