博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
单例模型 懒汉 饿汉
阅读量:6326 次
发布时间:2019-06-22

本文共 1115 字,大约阅读时间需要 3 分钟。

单例模型

饿汉模式:

#include 
using namespace std; class A {
public:     static A& instance()     {
        struct B         {
            A a;             B()             {
                a.show();             }         };         static B b;         return b.a;     }     void show()     {
        cout << "hello" << endl;     } private:     A(){} }; int main() {
    cout << "sdf" << endl;     A &m = A::instance();     return 0; }

懒汉模式:

#include 
using namespace std;class A{public: static A* instance() { if (a == NULL) { a = new A; a->show(); } return a; } void show() { cout << "hello" << endl; }private: static A *a; A(){}};A * A::a = NULL;int main(){ cout << "sdf" << endl; A *m = A::instance(); return 0;}

 

单例中懒汉和饿汉的本质区别在于以下几点:   1、饿汉式是线程安全的,在类创建的同时就已经创建好一个静态的对象供系统使用,以后不再改变。懒汉式如果在创建实例对象时不加上同步安全控制则会导致对对象的访问不是线程安全的。   2、从实现方式来讲他们最大的区别就是懒汉式是延时加载,它是在需要的时候才创建对象,而饿汉式在程序启动的时候就会创建,饿汉式无需关注多线程问题、写法简单明了、能用则用。但是它是加载类时创建实例。所以如果是一个工厂模式、缓存了很多实例、那么就得考虑效率问题,因为这个类一加载则把所有实例不管用不用一块创建。

转载地址:http://kpgaa.baihongyu.com/

你可能感兴趣的文章
对查询结果进行分页
查看>>
算法模板——并查集 2(支持快速即时查询本连通块内容,纯原创!)
查看>>
1630/2023: [Usaco2005 Nov]Ant Counting 数蚂蚁
查看>>
QC的OTA参考手册学习--第一篇
查看>>
初始java白盒测试--junit的使用
查看>>
redis持久化
查看>>
docker 1 为什么要使用docker
查看>>
牛客网上的最后一位
查看>>
常用Slider及Gallery
查看>>
lucene_03_索引的增删改查
查看>>
IText&Html2canvas js截图 绘制 导出PDF
查看>>
Maximum GCD (stringstream)题解
查看>>
HDU 3374 String Problem(最大最小表示+KMP)题解
查看>>
WindowManage与Window的在Activity的一点小应用
查看>>
#1036 – Table ‘* ‘ is read only
查看>>
Annotation(注解)介绍
查看>>
校门外的树2
查看>>
杭电2085--核反应堆(打表)
查看>>
杭电3785--寻找大富翁
查看>>
ASP.NET请求过程-从源码角度研究MVC路由、Handler、控制器
查看>>