码迷,mamicode.com
首页 > 其他好文 > 详细

第67课 经典问题解析五

时间:2016-07-14 03:15:06      阅读:174      评论:0      收藏:0      [点我收藏+]

标签:

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)构造函数和析构函数中不要抛出异常

 

第67课 经典问题解析五

标签:

原文地址:http://www.cnblogs.com/5iedu/p/5668757.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!