c++ 什么是singleton

c++ 什么是singleton


桃花长相依
浏览 519回答 1
1回答

富国沪深

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函数之前进行构造的。变量存在静态存储区。第二种特点是第一次用的时候构造,以后都返回它。变量存在静态存储区。第三种特点是第一次用的时候构造,以后都返回它。变量存在堆内存中。如果变量占用内存比较大,或者程序里运用特别多的单例导致占用很多内存,不建议用静态存储方式,因为静态存储区的大小是有限的。可能程序都运行不起来。 
打开App,查看更多内容
随时随地看视频慕课网APP