#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;
}