首页 > 其他 > 详细

单例模型 懒汉 饿汉

时间:2017-01-18 16:23:06      阅读:312      评论:0      收藏:0      [点我收藏+]

单例模型

饿汉模式:

#include <iostream>

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 <iostream>

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://www.cnblogs.com/jiu0821/p/5754584.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!