C++ Primer Plus(四)
完整阅读C++ Primer Plus 系统重新学习C++语言部分,记录 重要但易被忽略 的, 关键但易被遗忘 的。 友元、异常和其他 1、抛出异常类时,虽然catch的是一个引用,但是也会产生一次拷贝,因为当抛出异常的函数在 栈解退 的过程中会会调用异常类的析构函数,异常类将不复存在。 2、如果有一个异常类层次结构,应该这样排列catch块:将捕获位于层次结构最下面的异常类的catch语句放在最前面,将捕获基类异常的catch语句放在最后面。抛出异常的顺序要与catch块相反。 3、在catch语句中使用基类对象时,将捕获所有的派生类对象,但 派生类特性将被剥去 ,因此将使用虚方法的基类版本。 4、 将 dynamic_cast 用于引用时,由于没有与空指针对应的引用值,因此无法使用特殊的引用值来表示失败,当请求不正确时,将引发 bad_cast 的异常。 5、 reinterpret_cast 运算符并不支持所有的类型转换,例如,可以将指针类型转换为足以存储指针的整数,但不能将指针转换为更小的整型或浮点型。另一个限制是,不能将函数指针和数据指针互相转换。 string类和标准模板库 6、使用new分配内存时,可以使用 auto_ptr 、 unique_ptr 、 shared_ptr 、但只有unique_ptr有使用new[]和delete[