C++学习系列笔记(九)

举报
小小谢先生 发表于 2022/04/14 00:10:37 2022/04/14
【摘要】 10.1、使用try和catch捕获异常 try和catch是最重要的C++关键字。要捕获语句可能引发的异常,可将它们放在try块中,并使用catch块对try块可能引发的异常进行处理: void somefunc(){ try { int* pNumber=new int; *pNumber=...

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


  
  1. void somefunc()
  2. {
  3. try
  4. {
  5. int* pNumber=new int;
  6. *pNumber=999;
  7. delete pNumber;
  8. }
  9. catch(……) //catches all exceptions
  10. {
  11. cout<<"Exception in somefunc(),quitting"<<endl;
  12. }
  13. }

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()块。

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

文章来源: blog.csdn.net,作者:小小谢先生,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/xiewenrui1996/article/details/100584836

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。