zoukankan      html  css  js  c++  java
  • 单例模式

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

    一、实现

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

           

    二、线程安全

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

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

           

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

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

           

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

            

  • 相关阅读:
    同样的代码bug
    Vim中的Tab
    在Vue中同时使用过渡和动画
    在Vue中使用animate.css
    Vue中的css动画
    动态组件与v-once指令
    在Vue中使用插槽
    非父子组件间的传值
    给组件绑定原生事件
    组件参数校验和非props特性
  • 原文地址:https://www.cnblogs.com/573177885qq/p/10234176.html
Copyright © 2011-2022 走看看