OTSSingleton.h 685 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. #pragma once
  2. namespace OTSController {
  3. /// <summary>
  4. /// Singleton template class by smart pointer.
  5. /// </summary>
  6. template<class singleType>
  7. class Singleton
  8. {
  9. public:
  10. static std::shared_ptr<singleType> GetInstance()
  11. {
  12. auto shareObject = m_singleObject.lock();
  13. if (!shareObject)
  14. {
  15. shareObject.reset(new singleType);
  16. m_singleObject = shareObject;
  17. }
  18. return shareObject;
  19. }
  20. private:
  21. /// <summary>
  22. /// The single object
  23. /// </summary>
  24. static std::weak_ptr<singleType> m_singleObject;
  25. };
  26. /// <summary>
  27. /// The single object
  28. /// </summary>
  29. template<class singleType>
  30. std::weak_ptr<singleType> Singleton<singleType>::m_singleObject;
  31. }