之前, 在http://blog.csdn.net/stpeace/article/details/68953253中, 我们一起看到过精妙的单例, 搬移过来看看:

#include <iostream>
using namespace std;

class A
{
public:
	int x;
	A()
	{
		printf("A constrct\n");
	}
	
	~A()
	{
		printf("A destruct\n");
	}
};


template <typename T>
class CSingleton 
{
public:
	static T* getInstance();
};

template <typename T>
T* CSingleton<T>::getInstance()
{
	static T instance;
	return &instance;
}

int main() 
{
	CSingleton<A>::getInstance()->x = 100;
	cout << CSingleton<A>::getInstance()->x << endl;
	cout << CSingleton<A>::getInstance()->x << endl;
	cout << CSingleton<A>::getInstance()->x << endl;

	return 0;
}
       结果:

A constrct
100
100
100
A destruct


      在上述单例中, 用的时候, CSingleton<A>让人时刻知道这是个单例, 感觉爽。  最近, 我遇到了上述单例的变形, 来看看:

#include <iostream>
using namespace std;

template <typename T>
class CSingleton 
{
public:
	static T* getInstance();
};

template <typename T>
T* CSingleton<T>::getInstance()
{
	static T instance;
	return &instance;
}

class A : public CSingleton<A>
{
public:
	int x;
	A()
	{
		printf("A constrct\n");
	}
	
	~A()
	{
		printf("A destruct\n");
	}
};



int main() 
{
	A::getInstance()->x = 100;
	cout << A::getInstance()->x << endl;
	cout << A::getInstance()->x << endl;
	cout << A::getInstance()->x << endl;

	return 0;
}
      结果:

A constrct
100
100
100
A destruct

      此时, 在使用A的时候, 对单例的感觉不那么强烈, 但使用起来很简单。 有点意思。


    


本文转载:CSDN博客