模板: //Singleton.h #ifndef SINGLETON_H #define SINGLETON_H #include <cassert> #include <boost/shared_ptr.hpp> template<typename T> class gameSingleton { protected: static int m_counts; static T* m_singleton; public: gameSingleton() { assert(!m_singleton); ++m_counts; assert(m_counts <= 1); } virtual ~gameSingleton() { assert(m_singleton); m_singleton = 0; } static T* getSingletonPtr() { if (!m_singleton) m_singleton = new T; static boost::shared_ptr<T> p(m_singleton); return m_singleton; } private: gameSingleton(const gameSingleton&); gameSingleton& operator=(const gameSingleton&); }; #endif //SINGLETON_H 类的实例: #include "stdafx.h" #include <iostream> using namespace std; // 创建类A的单一实例 class A { public: static A& instance(); // 创建一个可以获取类A的接口 int getData() // 获取数据 { cout<<"A::getData() "; return data; } void setData(int n) // 设置数据 { cout<<"A::setData() "<<n<<endl; data = n; } private: A(int n = 99) // 首先把类A的构造函数声明为 private { cout<<"Construction A "<<n<<endl; data = n; } // 类的拷贝构造函数 和 赋值函数 不需要实现,以防止发生拷贝 A(A& a) ; A& operator=(const A& a) ; private: int data; }; A& A::instance() { static A a; return a; } int main() { A& ca = A::instance(); // 创建类A的实例 ca cout<<ca.getData()<<endl; ca.setData(100); A& ba = A::instance(); // 创建类A的实例 ba cout<<ba.getData()<<endl; getchar(); }