1. 指针的判别
(1)拾遗
①C++中仍然支持C语言中的可变参数函数
②C++编译器的匹配调用优先级:重载函数>函数模板>变参函数
(2)思路
①将变量分为两类:指针 VS 非指针
②编写函数:
指针变量调用时回true
非指针变量调用时返回false
(3)函数模板与变参函数的化学反应
template<typename T> //优先匹配函数模板 bool IsPtr(T* v) // match pointer { return true; } //变参函数 //再匹配变参函数 bool IsPtr(...) // match non-pointer { return false; }
【编程实验】指针判断
(4)存在的缺陷及完善
①变参函数无法解析自定义类类型的对象参数,可能造成程序崩溃
②可以在编译期就精确匹配结果,而不需等到实际调用IsPtr时才确定。思路是通过sizeof,具体见例子中的注释。
2. 构造函数中的异常
(1)当构造函数中抛出异常时:
①构造函数立即停止。
②当前对象无法生成
③析构函数不会被调用
④对象所占用的空间立即收回
(2)工程项目中的建议
①不要在构造函数中抛出异常(注:也可以在构造函数中try-catch可能的异常,并在异常发生时做善后的处理(如资源释放),最后再将这个异常抛出,以通知外部的函数。但建议不要这样做,因为有更好的二阶构造模式,二阶模式在内部自己处理了异常,而抛异常的方法是把异常处理再次丢给了外部的函数)
②当构造函数可能产生异常时,使用二阶构造模式
【编程实验】构造中的异常
3. 析构函数中的异常
(1)析构函数的抛出异常导致:对象所使用的资源无法完全释放
(2)避免在析构函数中抛出异常
4. 小结
(1)C++中依然支持变参函数
(2)变参函数无法很好的处理对象参数
(3)利用函数模板和变参函数能够判断指针变量
(4)构造函数和析构函数中不要抛出异常
时间: 2024-10-13 23:57:35