3 Star 2 Fork 3

四月是你的谎言/深入应用C++11:代码优化与工程级应用 的实践代码

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
8-1.cpp 2.03 KB
一键复制 编辑 原始数据 按行查看 历史
#include <stdexcept>
#include <iostream>
template<typename T>
class Sigleton{
public:
static T * Instance()
{
if(m_pInstance == nullptr)
{
m_pInstance = new T();
}
}
template <typename T0>
static T* Instance(T0 arg0)
{
if(m_pInstance == nullptr)
{
m_pInstance = new T(arg0);
}
}
template <typename T0, typename T1>
static T* Instance(T0 arg0, T1 arg1)
{
if(m_pInstance == nullptr)
{
m_pInstance = new T(arg0, arg1);
}
return m_pInstance;
}
static T*GetInstance()
{
if(m_pInstance == nullptr)
{
throw std::logic_error("the instance is not init, \
please initalize the instance first");
}
}
static void DestoryInstance()
{
delete m_pInstance;
m_pInstance = nullptr;
}
private:
Sigleton(void); //构造函数
virtual ~Sigleton(void); //虚析构
Sigleton(const Sigleton&); //拷贝构造
Sigleton& operator=(const Sigleton&); //赋值构造
static T * m_pInstance;
};
template<class T> T* Sigleton<T>::m_pInstance = nullptr; //静态变量,也可以用模板来初始化一下
struct A{
A(){}
};
struct B{
B(int x):a(x) {}
int a;
};
struct C{
C(int x, double y):a(x), b(y){}
int a;
double b;
};
int main(void)
{
Sigleton<A>::Instance();
Sigleton<B>::Instance(1);
Sigleton<C>::Instance(1, 1.2);
Sigleton<A>::GetInstance();
B * b = Sigleton<B>::GetInstance();
std::cout << b->a << std::endl;
C * c = Sigleton<C>::GetInstance();
std::cout << c->a << "\t" << c->b << std::endl;
Sigleton<A>::DestoryInstance();
Sigleton<B>::DestoryInstance();
Sigleton<C>::DestoryInstance();
return 0;
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/HeLiangMsg/c11_book_learned_code.git
[email protected]:HeLiangMsg/c11_book_learned_code.git
HeLiangMsg
c11_book_learned_code
深入应用C++11:代码优化与工程级应用 的实践代码
master

搜索帮助