富国沪深
singleton翻译成单例,整个程序运行过程中只能存在这个类的一个对象。实现方式有三种。第一种 - 全局静态变量:1234567891011class Singleton {private: static Singleton instance; //静态变量,全局只有这一个对象 Singleton() {} //构造函数放在private里,让外部无法构造对象 Singleton(const Singleton&); //复制构造函数放在private里,让外部无法复制对象 Singleton& operator=(const Singleton&); //赋值函数放在private里,让外部无法复制对象public: Singleton& getInstance() { return instance; }}; Singleton Singleton::instance;//构造一个静态变量,作为全局唯一的对象。第二种 - 局部静态变量:1234567891011class Singleton {private: Singleton() {} //构造函数放在private里,让外部无法构造对象 Singleton(const Singleton&); //复制构造函数放在private里,让外部无法复制对象 Singleton& operator=(const Singleton&); //赋值函数放在private里,让外部无法复制对象public: Singleton& getInstance() { static Singleton instance; //局部静态变量,全局只有这一个对象 return instance; }};第三种 - 第一次用的时候申请内存,以后都直接用它:123456789101112131415161718class Singleton {private: Singleton *instance; Singleton() {} //构造函数放在private里,让外部无法构造对象 Singleton(const Singleton&); //复制构造函数放在private里,让外部无法复制对象 Singleton& operator=(const Singleton&); //赋值函数放在private里,让外部无法复制对象public: Singleton1* getInstance() { if (instance == NULL) { mutex_lock(); //并没有这个函数,我只是示意一下,表示互斥锁 if (instance == NULL) { instance = new Singleton(); } mutex_release(); //释放互斥锁 } return instance; }};第一种特点是程序加载时间长。因为静态变量是在main函数之前进行构造的。变量存在静态存储区。第二种特点是第一次用的时候构造,以后都返回它。变量存在静态存储区。第三种特点是第一次用的时候构造,以后都返回它。变量存在堆内存中。如果变量占用内存比较大,或者程序里运用特别多的单例导致占用很多内存,不建议用静态存储方式,因为静态存储区的大小是有限的。可能程序都运行不起来。