单例模式是一种常用的软件设计模式,它保证在软件运行过程中对象在内存中只存在一份实例,单例模式通常有懒汉模式与饿汉模式。
1.懒汉模式
懒汉模式是在第一次调用的时候才创建实例,但是在多线程的环境下很可能创建多个实例,因此是线程不安全的。
C++代码:
class Singleton { protected: Singleton(){} Singleton(const Singleton& singleton)(){} private: static Singleton* p; public: static Singleton* instance(); } Singleton* Singleton::p = NULL;
Singleton* Singleton::instance()
{
if(NULL == p)
{
//多线程不安全进入
p = new Singleton();
}return p;
}
这里切记除了给类添加一个保护的构造函数外,还需添加一个保护的拷贝构造函数,不然编译器会给我们添加一个public访问标志的构造函数,这时我们按照下面这样可以生成多个实例:
Singleton* singleton = Singleton::instance();
//调用编译器提供的默认构造函数
Singleton singleton1 = *singleton;
Singleton singleton2 = *singleton;
2.饿汉模式
饿汉模式是在程序加载的时候就已经创建了一个实例,不存在多线程环境下创建多实例的问题,因此是线程安全的。
C++代码:
class Singleton { protected: Singleton(){} Singleton(const Singleton& singleton)(){} private: static Singleton* p; public: static Singleton* instance(); } Singleton* Singleton::p = new Singleton();
Singleton* Singleton::instance()
{
return p;
}
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于