1234567891011121314151617181920212223242526272829303132333435363738 |
- #pragma once
- namespace OTSController {
- /// <summary>
- /// Singleton template class by smart pointer.
- /// </summary>
- template<class singleType>
- class Singleton
- {
- public:
- static std::shared_ptr<singleType> GetInstance()
- {
- auto shareObject = m_singleObject.lock();
- if (!shareObject)
- {
- shareObject.reset(new singleType);
- m_singleObject = shareObject;
- }
- return shareObject;
- }
- private:
- /// <summary>
- /// The single object
- /// </summary>
- static std::weak_ptr<singleType> m_singleObject;
- };
- /// <summary>
- /// The single object
- /// </summary>
- template<class singleType>
- std::weak_ptr<singleType> Singleton<singleType>::m_singleObject;
- }
|