10.1、使用try和catch捕获异常
try和catch是最重要的C++关键字。要捕获语句可能引发的异常,可将它们放在try块中,并使用catch块对try块可能引发的异常进行处理:

void somefunc()
{try{int* pNumber=new int;*pNumber=999;delete pNumber;}catch(……)  //catches all exceptions{cout<<"Exception in somefunc(),quitting"<<endl;}
}

catch(……)捕获未被其他catch块显示捕获的所有异常。
自定义异常类应继承std::exception,这让你能够重用捕获std::exception异常的所有catch()块

总结:编写优秀的C++代码

• 给变量指定(无论是对您还是其他人来说都)有意义的名称。值得多花点时间给变量取个好名。
• 对于int、float等变量,务必进行初始化。

• 务必将指针初始化为NULL或有效的地址———如运算符new返回的地址。

• 使用数组时,绝不要跨越其边界。跨越数组边界被称为缓冲区溢出,可导致安全漏洞。

• 不要使用C风格字符串(char*'),也不要使用strelen()和strcopy()等函数。std::string更安全,还提供了很多有用的方法,如获取长度、进行复制和附加的方法。

• 仅当确定要包含的元素数时才使用静态数组。如果不确定,应使用std::vector等动态数组。

• 声明和定义接受非 POD 类型作为输入的函数时,应考虑将参数声明为引用,以免调用函数时执行不必要的复制步骤。

• 如果类包含原始指针成员,务必考虑如何在复制或赋值时管理内存资源所有
权,即应考虑编写复制构造函数和赋值运算符。

• 编写管理动态数组的实用类时,务必实现移动构造函数和移动赋值运算符,以改善性能。

• 务必正确地使用const。理想情况下,get()函数不应修改类成员,因此应将其声明为const函数。同样,除非要修改函数参数包含的值,否则应将其声明为const引用。

• 不要使用原始指针,而应尽可能使用合适的智能指针。

• 编写实用类时,务必花精力实现让它使用起来更容易的运算符。

• 在有选择余地的情况下,务必使用模板而不是宏。模板不但是通用的,还是类型安全的。

• 编写类时,如果其对象将存储在诸如vector和list等容器中,或者被用作映射中的键,务必实现运算符<,它将用作默认排序标准。 如果您编写的lambda表达式很长,应考虑转而使用函数对象,即实现了operator()的类,因为函数对象可重用,且只有一个地方需要维护。

• 绝不要认为运算符new肯定会成功。对于分配资源的代码,务必处理其可能引发的异常,即将其放在try块中,并编写相应的catch()块。

• 绝不要在析构函数中引发异常。

C++学习系列笔记(九)相关推荐

  1. 深度学习系列笔记——贰 (基于Tensorflow2 Keras搭建的猫狗大战模型 三)

    深度学习系列笔记--贰 (基于Tensorflow Keras搭建的猫狗大战模型 一) 深度学习系列笔记--贰 (基于Tensorflow Keras搭建的猫狗大战模型 二) 前面两篇博文已经介绍了如 ...

  2. 深度学习系列笔记——贰 (基于Tensorflow Keras搭建的猫狗大战模型 一)

    猫狗大战是著名的竞赛网站kaggle几年前的一个比赛,参赛者得到猫狗各12500张图片,作为训练集,另外还会得到12500张猫和狗的图片,作为验证.最后提交结果至kaggle平台,获得评测分数. 本篇 ...

  3. 【Python学习系列十九】基于scikit-learn库进行特征选择

    场景:特征选择在模型训练前是非常有意义的,实际上就是先期对特征相关性进行分析. 参考:http://blog.csdn.net/fjssharpsword/article/details/735503 ...

  4. 前端学习系列——(九)理解什么是ID选择器的“唯一性”

    在学习CSS样式的时候,我们肯定会遇到ID选择器.用法一类的这里就不说了,说一说对ID选择器可能存在的一个误区. 误区:id选择器具有唯一性? <!DOCTYPE html> <ht ...

  5. Linux学习系列十九:如何高效的阅读Linux源码

    1.引言 如何阅读代码还要单独写一篇文章?难道不是随便用一个IDE就可以了吗?回到上一篇文章里介绍的那个问题,需要修改uboot里board_mmc_init函数里的writel(0x66666666 ...

  6. JQuery学习系列(九)AJAX

    什么是 AJAX? AJAX = Asynchronous JavaScript and XML. AJAX 是一种创建快速动态网页的技术. AJAX 通过在后台与服务器交换少量数据的方式,允许网页进 ...

  7. C++学习系列笔记(八)

    1.STL映射类 STL map和multimap的内部结构看起来像棵二叉树.这意味着在map或multimap中插入元素时将进行排序.要使用STL map或multimap类,需要包含头文件< ...

  8. C++学习系列笔记(七)

    1.标准模版库介绍 STL容器 顺序容器 顺序容器按顺序存储数据,如数组和列表.顺序容器具有插入速度快但查找操作相对较慢的特征.STL顺序容器包括: std::vector--操作与动态数组一样,在最 ...

  9. C++学习系列笔记(六)

    1.类型转换运算符 C++提供了一种新的类型转换运算符,专门用于基于继承的情形,这种情形在C语言编程中并不存在.4个C++转换类型如下; static_cast dynamic_cast reinte ...

最新文章

  1. retrofit 源码分析
  2. Vue开发跨端应用(六)添加onsenui组件库
  3. python +Django 搭建web开发环境初步,显示当前时间
  4. linux 连接数 限制,linux设置最大连接数
  5. 【12c】12c RMAN新特性之通过网络远程恢复数据库(RESTORE/Recover from Service)
  6. python完全支持面向对象编程_Python 面向对象编程概要
  7. 模块化的ESP8266小电视设计与制作
  8. FairyGUI笔记 :MovieClip(三)
  9. 企业建行手机银行怎么对公转账限额
  10. 团队作业3 需求改进系统设计
  11. intel网卡驱动for linux ubuntu系统
  12. 企业数据战略中,什么样的数据才能算是真正的数据资产
  13. 蚌埠市哪有学计算机编程的,蚌埠小孩学习编程
  14. 个人微信ipad二次开发
  15. mysql怎么连接,mysql怎么连接
  16. 服务器2012系统崩溃,意外的Windows服务器2012 R2上的WCF服务崩溃
  17. 十日谈 (share)
  18. Windows 10远程桌面指定端口连接;端口号修改;远程桌面默认端口号
  19. mysql命令 执行存储过程_mysql使用命令行执行存储过程
  20. Ambari 2.7.5+HDP3.1.5离线安装详细教程(附安装包)

热门文章

  1. Linux 下编译、安装、配置 QT
  2. DDD理论学习系列(8)-- 应用服务领域服务
  3. IT创业公司如何选型,以避免未来出现的版权之争?
  4. IBatisNet XML 特殊配置
  5. OC之protocol监听器的实现
  6. 在raspbian上配置apache2/subversion/xdebug及mysql远程访问
  7. mysql当时读_Mysql事务以及四中隔离级别实例2以及InnoDB如何解决当时读的幻读问题...
  8. 【每日一练 088】性能优化-SQL tuning(一)
  9. 史上最全近百条Oracle DBA日常维护SQL脚本指令
  10. 线上分享|云和恩墨大讲堂201902:MySQL基础之体系结构