第六十七课 问题解析
一、变成判断一个变量是否是指针
-
拾遗
C++ 中仍然支持C语言中的可变参数函数
C++编译器的匹配调用优先级
- 重载函数
- 函数模板
- 变参参数
-
思路
将变量分为两类:指针vs非指针
编写函数:
- 指针变量调用时返回true
- 非指针变量调用时返回false
函数模板与变参函数
-
template <typename T> bool IsPtr(T* V) { return true; } bool IsPtr(...) { return false; } /* 存在缺陷 变参函数无法解析对象参数,可能造成程序崩溃 */ template <typename T> char IsPtr(T* V) { return 'a'; } int IsPtr(...) { return 0; } #define ISPTR(p) (sizeof(IsPtr(p)) == sizeof(char))
二、如果构造函数中抛出异常会发生什么情况?
-
构造函数抛出异常会发生什么
构造过程立即停止
当前对象无法生成
析构函数不会被调用
对象占用空间立即收回
-
工程项目中的建议
不要再构造函数中抛出异常
当构造函数可能产生异常时,使用二阶构造模式
在析构函数中抛出异常将会导致所使用的资源无法完全释放
三、小结
- C++ 中依然支持变参函数
- 变参函数无法很好的处理对象参数
- 利用函数模板和变参函数能够判断指针变量
- 构造函数和析构函数中不要抛出异常