首页 > 代码库 > 学习日记之单例模式和Effective C++

学习日记之单例模式和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 最优化。这对致力于“对象尺寸最小化”的程序库开发人员来说,可能非常重要。

学习日记之单例模式和Effective C++