• 单例模式


    单例模式中,一个类只能有一个实例

    一、实现

            将默认构造函数、拷贝构造设为私有; 通过静态成员变量和静态成员函数来生成、获取单个实例。

           

    二、线程安全

           上述例子对于单线程没问题,但对于多线程可能会出错(某个线程在生成实例时,其他线程也可能进入并生成实例)。

           1、一种办法是加锁,但代价较高:当只是读取实例时,也需要加锁判断,比较费时;

           

      2、双检查锁:在获取锁之前,加一个判断。很有意思的思路,可惜是错误的,无法使用。在生成实例时,有的编译器会优化生成实例过程,

    造成在调用构造函数之前,已经对m_instance进行赋值,此时如果有其他实例进入,则会造成获取的实例无法使用;

           

               3、c++11之后引入的方法,使用atomic库来保证,在生成实例时,编译器不要优化生成实例的过程,按照顺序生成即可。

            

  • 相关阅读:
    李洪强经典面试题43
    李洪强经典面试题42
    李洪强经典面试题41-iOS选择题
    HTTP头部解析
    iOS
    内网安全工具之hscan扫描
    跟着百度学PHP[4]OOP面对对象编程-17-多态
    绕过注入学习笔记
    引用/别名
    跟着百度学PHP[4]OOP面对对象编程-16-switch逻辑就语句
  • 原文地址:https://www.cnblogs.com/573177885qq/p/10234176.html
Copyright © 2020-2023  润新知