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