#pragma once
#include <QObject>
/************************************************************************/
/* 智能指针单例基类 */
/************************************************************************/
#include <mutex>
#include <memory>
template <typename T>
class HiSingleton
{
public:
static std::shared_ptr<T> GetInstance()
{
if (!m_pSington)
{
std::lock_guard<std::mutex> gLock(m_Mutex);
if (nullptr == m_pSington)
{
m_pSington = std::make_shared<T>();
}
}
return m_pSington;
}
static void DesInstance()
{
if (m_pSington)
{
m_pSington.reset();
m_pSington = nullptr;
}
}
private:
class GC
{
public:
~GC()
{
if (m_pSington != nullptr)
{
DesInstance();
}
}
static GC gc;
};
private:
explicit HiSingleton();
HiSingleton(const HiSingleton&) = delete;
HiSingleton& operator=(const HiSingleton&) = delete;
~HiSingleton();
private:
static std::shared_ptr<T> m_pSington;
static std::mutex m_Mutex;
};
template<typename T>
std::shared_ptr<T> HiSingleton<T>::m_pSington = nullptr;
template<typename T>
std::mutex HiSingleton<T>::m_Mutex;
template<typename T>
std::shared_ptr<T> HiSingleton<T>::GC::gc;
智能指针单例模板类
最新推荐文章于 2022-05-27 07:21:43 发布
5807

被折叠的 条评论
为什么被折叠?



