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