:
基本承诺: 如果异常被抛出, 程序的所有事务仍然保持在有效的状态下, 不会有类似互斥锁没有释放的情况, 但有可能改变部分程序状态, 例如流的读取记号改变
强烈保证: 如果异常被抛出, 程序状态不改变....
copy and swap并不总有强烈保证, 这是因为函数内部常常存在连带影响, 几个异常安全的函数由于可能修改了外部数据而导致它们的结合体不再安全
强烈保证许多时候需要巨大的开销来实现, 因此基本保证最终才是最常用的...这种特性会在你试图使用多态的缺省参数值时产生非常奇怪的效果, 因此千万不要重新定义
这种需求可以用NVI手法进行一定程度的解决, 因为协议中我们永远不应该重写非虚函数, 所以在非虚函数中设置缺省参数是安全的..., 只和重载一样和名称与参数有关, 所以很容易二义
更复杂的情况是下图的"菱形继承":
菱形继承中, 对于不同基类都拥有的同名成员, C++默认会复制多份以供使用, 如果不希望复制就应该使用虚继承,...是用来弥补C++缺少反射机制的模板库, 目的是对使用的类型进行一些基本信息的提取.