1、用模板实现单例模式
SIngleton.h
#include "iostream"
using namespace std;
template <typename T>
class Singleton
{
public:
static T& GetInstance()
{
Init();
return *instance_;
}
private:
static void Init()
{
if (instance_ == 0)
{
instance_ = new T;
atexit(Destroy); // 注册函数,当程序结束的时候会自动调用这个函数
}
}
static void Destroy()
{
delete instance_;
}
Singleton(const Singleton& other);
Singleton& operator=(const Singleton& other);
Singleton()
{
}
~Singleton()
{
}
static T* instance_;
};
template <typename T>
T* Singleton<T>::instance_ = 0;
main.cpp
#include <iostream>
#include "Singleton.h"
class ApplicationImpl
{
public:
ApplicationImpl() {
cout << "ApplicationImpl ..." << endl;
}
~ApplicationImpl() {
cout << "~ApplicationImpl ..." << endl;
}
void Run()
{
cout << "Run ..." << endl;
}
};
typedef Singleton<ApplicationImpl> Application;
int main() {
Application::GetInstance().Run();
Application::GetInstance().Run();
return 0;
}