异常处理:执行throw时,不会执行跟在throw后面的语句,而是将控制从throw转移到匹配的catch,该catch可以是同一函数中局部的catch,也可以在直接或间接调用发生异常的函数的另一个函数中。
抛出异常时如果是抛出指针,可能出现分割(解引用指向派生类对象的指针)或者更严重的问题,所以一般不采取这种方式。
栈展开:如果对抛出异常的函数的调用是在try块中,则检查与该try相关的catch子句。如果找到匹配的catch,就处理异常;如果找不到匹配的catch,调用函数也退出,并且继续在调用这个函数的函数中查找。
栈展开期间,释放局部对象所用的内存并运行类类型局部对象的析构函数。
析构函数应从不抛出异常。
terminate函数可以调用abort函数,导致程序终止。
基类的异常说明符可以用于捕获派生类型的异常对象,而且,异常说明符的静态类型决定catch子句可以执行的操作。
catch子句的次序必须反映类型层次,带有因继承而相关的类型的多个catch子句,必须从最低派生类型到最高派生类型排序。
通过定义一个类来封装资源的分配和释放,可以保证正确释放资源,这一技术成为“资源分配即初始化”,简称RAII
标准库的auto_ptr类就是“资源分配即初始化”的例子。
库倾向于定义许多全局名字——主要是模板名、类型名或函数名。在使用来自多个供应商的库编写应用程序的时候,发生的名字冲突问题称为命名空间污染。
划分全局命名空间以方便使用独立开发的库。
命名空间作用域不能以分号结束
1.每个命名空间是一个作用域;
2.使用using声明可以从命名空间外部使用命名空间成员
3.命名空间可以是不连续的
4.命名空间可以是未命名的。未命名的命名空间的定义局部于特定文件,从不跨越多个文本文件。
多重继承是从多于一个直接基类派生类的能力,多重继承的派生类继承其所有父类的属性。
虚继承是一种机制,类通过虚继承指出它希望共享其虚基类的状态。在虚继承下,对给定虚基类,无论该类在派生层次中作为虚基类出现多少次,只继承一个共享的基类子对象。共享的基类子对象成为虚基类。