如何用微信支付购物网站,网站建设软著,凡科门店通包括哪些产品,企业所得税优惠政策最新2023计算单例模式
若有class A,整个程序中保证A类只有一个对象。 1.为了保证只有一个实例#xff0c;那么就不能让A类随意创建对象#xff0c;也就不能调用构造函数#xff0c;那么就需要把构造函数私有化。 2.需要私有的静态当前类的指针成员变量。 私有#xff1a;保证无法在类外…单例模式
若有class A,整个程序中保证A类只有一个对象。 1.为了保证只有一个实例那么就不能让A类随意创建对象也就不能调用构造函数那么就需要把构造函数私有化。 2.需要私有的静态当前类的指针成员变量。 私有保证无法在类外对成员变量进行操作。 静态保证类的对向只有一个。 3.需要一个函数GetInstance()来返回单例模式的对象因为构造函数私有化所以无法在类外构造对象。那么GetInstance()函数就作为静态接口直接通过类名来调用函数。由于静态函数只能调用静态变量因此A类中的成员变量也需要是静态。由于成员变量是静态的所以要在类外进行初始化。 4.**对象释放的问题**由于单例模式只有一个对象所以占用内存很少不用专门释放内存等到程序结束后系统将所有内存回收即可。
懒汉模式
第一次调用获取实例的函数GetInstance()时才创建对象。
//懒汉模式
class SingletonLazy{
private://1.构造函数私有化SingletonLazy(){}//2.私有的静态当前类的指针成员变量static SingletonLazy* pSingleton;public://3.获取对象的静态接口static SingletonLazy* GetInstance(){if(pSingleton nullptr){pSingleton new SingletonLazy;}return pSingleton;}
};
SingletonLazy* SingletonLazy::pSingleton nullptr;饿汉模式
直接在类外初始化对象时直接创建。在main函数执行之前就已经创建好对象。
//饿汉模式
class SingletonHungry{
private://1.构造函数私有化SingletonHungry(){}//2.私有的静态当前类的指针成员变量static SingletonHungry* pSingleton;public://3.获取对象的静态接口static SingletonHungry* GetInstance(){return pSingleton;}
};
SingletonHungry* SingletonHungry::pSingleton new SingletonHungry;单例模式遇到多线程
1.懒汉模式在GetInstance函数中创建对象那么如果多线程同时调用GetInstance函数时那么线程不安全。 2.饿汉模式在main函数执行前就已经创建好了对象就不会同时对单例对对象进行操作所以线程安全。