【C++】单例模式的一种简单实现的模板

模板代码如下:
template 
class Singleton{
private:
	static T *s_this;
protected:
	Singleton()
	{
		assert(s_this == nullptr || "单例模式");
		s_this = static_cast(this);
	}
	~Singleton(){s_this = nullptr;}
public:
	static T& GetSingleton(){return *s_this;}
};

template
T* Singleton::s_this = nullptr;

假设SubClass为需要实现单例模式的类,使用方法如下:

class SubClass: public Singleton{...};
调用单例模式的方法如下:

SubClass::GetSingleton();

详细注释:

  1. 模板类的构造和析构函数非公有,因为单纯的创建本类对象是没有意义的。
  2. nullptr是C++11中的关键字,表示空指针。
  3. C++的模板机制能够保证,每个类内部的静态变量s_this只被实例化一次,虽然它被定义在头文件中。这种特性使得我们可以在头文件中定义全局变量。

你可能感兴趣的:(C++)