zoukankan      html  css  js  c++  java
  • 学习日记之单例模式和Effective C++

    单例模式(Singleton):保证一个类仅有一个实例,并提供一个訪问它的全局訪问点。


    (1),通常我们能够让一个全局变量使得一个对象被訪问,但它不能防止你实例化多个对象。一个最好的办法就是,让类自身负责保存它的唯一实例。这个类能够保证没有其它实例被创建,而且它能够提供一个訪问该实例的方法。

    (2),lock 是确保当一个线程位于代码的临界区时,还有一个线程不进入临界区。假设其它线程试图进入锁定的代码,则它将一直等待,知道该对象被释放。

    (3),双重锁定解决效率问题。

    (4),C#与公共语言执行库也提供了一种“静态初始化”方法,这样的方法不须要开发者显示地编写线程安全代码,就可以解决多线程环境下它是不安全地问题。

    (5),这样的静态初始化的方式是在自己被载入时就将自己实例化,所以被形象的称谓饿汉式单例类,假设在第一次被引用时,才会将自己实例化,被称谓懒汉式单例类。


    Effective C++:


    1:绝不又一次定义继承而来的缺省參数值

    (1),绝对不要又一次定义一个继承而来的缺省參数值,由于缺省參数值都是静态绑定,而 virtual 函数式动态绑定的。


    2:通过复合塑模出 has-a 或“依据某物实现出”

    (1),复合(compositon)的意义和 public 继承全然不同。

    (2),在应用域(application domain),复合意味 has-a 。在实现域(implementation domain),复合意味 is-implemented-in-terms-of(依据某物实现出)。


    3:明智而审慎地使用 private 继承

    (1),Private 继承意味着 is-implemented-in-terms-of (依据某物实现出)。它通常比复合(composition)的级别低。可是当 derived class 须要訪问 protected base class 的成员,或须要又一次定义继承而来的 virtual 函数时,这么设计是合理的。

    (2),和复合(composition)不同, private 继承能够造成 empty base 最优化。这对致力于“对象尺寸最小化”的程序库开发人员来说,可能非常重要。

  • 相关阅读:
    qml-qt项目利用google 分析进行数据统计分析
    mark 一下
    一篇神文
    android webview web里面的数据透传到java以及java的数据透传到web
    数据库表大小排序
    sql 删除数据库所有用户表
    mssql 修改文件逻辑名称
    灰色滤镜,网页灰色代码
    log4net.config 单独文件
    js获取页面宽度高度及屏幕分辨率
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/4208136.html
Copyright © 2011-2022 走看看