- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
上海交大面向对象程序设计C++课件第13章.ppt
计算机网络讲义 第13章 异常处理 异常处理的概念 异常处理基础: try, throw, catch 再抛出异常、异常指定、意外异常 堆栈解退 异常与构造/析构函数、继承的关系 new故障处理、auto_ptr 标准库的异常层次 小结 异常处理的概念 异常处理(exception handling)基于Andrew Koenig 和Bjarne Stroustrup的论文《Exception Handling for C++(revised)》,发表于1990年4月在美国旧金山举行的USENIX C++会议上。 异常处理机制的提出动因: 写函数库的程序员可以检测到库函数运行时的错误(如数组访问越界),但却通常不知道应该如何处理这些错误。 异常处理机制支持函数库程序员在检测到库函数运行错误时抛出(throw)一个异常,并不用当场处理,而是等待由该函数的某一级调用者来捕获(capture)这个异常并加以妥善处理。 处理错误的传统方法 处理错误的传统方法:错误处理代码是在整个系统代码中分布的。代码中可能出错的地方都要当场进行错误处理。 好处: 程序员阅读代码时能够直接看到错误处理情况,确定是否实现了正确的错误检查。 问题: 代码中受到错误处理的“污染”,使应用程序本身的代码更加晦涩难懂,难以看出代码功能是否正确实现。这样就使代码的理解和维护更加困难。 异常处理 C++的新异常处理特性: 异常处理将检测发现错误的代码与处理错误的代码分开来。程序员的工作也可做相应分工(例如,库函数程序员负责检测异常,而调用库函数的另一程序员则负责捕获与处理异常)。 使程序员可以删除程序执行“主线条”中的错误处理代码,从而提高程序的可读性和可维护性。 可以捕获所有类型的异常、捕获特定类型的所有异常和捕获相关类型的所有异常。可以减少程序未能捕获的错误,使程序更加健壮。异常处理使程序可以捕获和处理错误,而不是任其发生和造成恶果。如果程序员不提供处理致命错误的措施,则程序终止。 异常的常见例子 异常的常见例子: new无法取得所需内存 数组下标超界 运算溢出 除数为0 无效函数参数 。。。。。。 异常处理的适用范围 同步错误 vs. 异步情况: 可以处理除数为0之类的同步错误(synchronous error,在程序执行除法指令时发生)。在程序执行除法之前,异常处理首先检查除数,如果除数为0,则抛出(throw)异常; 异常处理并不处理异步情况.如磁盘I/O完成、网络消息到达、鼠标单击等等,这些情况最好用其他方法处理,如中断处理。 错误的分开处理 vs. 交互式对话: 异常处理通常用于发现错误的部分与处理错误的部分在不同部分(不同范围)的情况; 与用户进行交互式对话的程序不能用异常来处理输入中的错误。 出错后系统恢复 vs. 出错后有序处理并正常结束 异常处理使得系统从导致异常的错误中恢复。恢复过程即执行异常处理器(exception handler)。 异常处理特别适合程序无法恢复但需要提供有序整理的情况,然后程序可以正常地结束 处理错误的其他方法 ?用assert测试编码和设计错误。如果其返回false,则程序终止,应纠正代码。这种方法在调试时很有用处。 忽略异常,这不适合公开发布的软件产品和任务关键的专用软件。但自用软件通常可以忽略许多错误。 退出程序,使程序无法运行完毕或产生错误结果。实际上,对于许多错误类型,这是个好办法,特别是对于能让程序运行完毕的非致命错误,因为让程序运行完毕很可能使程序员误以为程序工作很顺利。这种方法也不适合任何任务关键的应用程序。资源问题也很重要,如果程序取得资源,则应先正常返回资源之后再终止。 处理错误的其他方法(续) 设置一些错误指示符。这里的问题是程序不一定在发生错误的所有地方都检查这些错误指示符。 测试错误条件、发出错误消息和调用exit,向程序环境传递相应的错误代码 setjump和longjump。这个功能通过seljmp.h实现,可以指定从深层嵌套函数立即转入错误处理器。如果没有setjump/longjump,则程序要执行几个返回才能从深层嵌套函数退出。这种方法可以转入某个错误处理器。但其在C++中有危险性,因为其解退堆栈而不调用自动对象的析构函数,从而可能造成严重问题。 某些特定错误有专门的处理功能。例如,new无法分配内存时,可以用new_handler函数处理错误。通过提供函数名作为set_new_handler的参数可以改变这个函数。 第13章 异常处理 异常处理的概念 异常处理基础: try, throw, catch 再抛出异常、异常指定、意外异常 堆栈解退 异常与构造/析构函数、继承的关系 new故障处理、auto_ptr 标准库的异常层次 小结 异常处理基础简介 异常处理代
文档评论(0)