第六十七课 问题解析

第六十七课 问题解析

一、变成判断一个变量是否是指针

  • 拾遗

    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++ 中依然支持变参函数
    • 变参函数无法很好的处理对象参数
    • 利用函数模板和变参函数能够判断指针变量
    • 构造函数和析构函数中不要抛出异常
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值