单例模板
#pragma once
#include <memory>
#include <mutex>
template <typename T>
class Singleton
{
public:
template <typename... Args>
static void createInstance(Args&&... args)
{
std::lock_guard<std::mutex> lock(m_mutex);
if (!m_sptrInstance)
{
m_sptrInstance = std::make_shared<T>(std::forward<Args>(args) ...);
}
return;
}
static std::shared_ptr<T> getInstance(void)
{
std::lock_guard<std::mutex> lock(m_mutex);
if (!m_sptrInstance)
{
throw std::logic_error("the instance is not init");
}
return m_sptrInstance;
}
static void destroyInstance(void)
{
std::lock_guard<std::mutex> lock(m_mutex);
if (m_sptrInstance)
{
m_sptrInstance.reset();
m_sptrInstance = nullptr;
}
return;
}
private:
static std::shared_ptr<T> m_sptrInstance;
static std::mutex m_mutex;
};
template <class