`
shi5jin
  • 浏览: 38046 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

如何使用异常?

阅读更多

请参考 TC++PL 章节 8.3、第十四章,以及附录 E。附录聚焦于如何为“苛刻的”应用程序编写异常安全(exception-safe)的代码,它并非写给初学者看的。

    C++ 里,异常用于发出一种信号,表示发生了“本地”处理不了的错误,比如构造函数里某个获取资源的操作失败了。例如:

        class Vector {
            int sz;
            int* elem;
            class Range_error { };
        public:
            Vector(int s) : sz(s) { if (sz < 0) throw Range_error(); /* ... */ }
            // ...
        };

    不要简单地将异常当作又一种从函数中返回一个值的方法。大多数用户以为异常处理代码等同于错误处理代码(因为 C++ 语言的定义怂恿他们这么想),他们的代码优化方式也反映了这种想当然的“以为”。

    一种关键的技术被称之为资源获取即初始化(有时被简称为 RAII),该技术使用带有析构函数的类来使资源管理有序化。例如:

        void fct(string s)
        {
            File_handle f(s,"r"); // File_handle 的构造函数打开名为 s 的文件
            // 使用 f
        } // File_handle 的析构函数在此关闭文件

    就算 fct() 中“使用 f”的那部分代码抛出了异常,析构函数仍然会被执行,所以文件会被正常关闭。下面这种常见的不安全的用法则恰恰相反:

        void old_fct(const char* s)
        {
            FILE* f = fopen(s,"r"); // 打开名为 s 的文件
            // 使用 f
            fclose(f); // 关闭文件
        }

    如果 old_fct 中“使用 f”的那部分代码抛出了异常(或者简单地返回了),那么文件就没有被关闭。在 C 程序里,longjmp() 是又一种危险。

原文地址http://www.research.att.com/~bs/bs_faq2.html#exceptions

分享到:
评论

相关推荐

    异常捕获与抛出的问题,什么时候应该try,什么时候应该throws

    * 是否需要在方法内部处理异常? * 是否需要记录日志? 结论 捕获异常和抛出异常是两种不同的机制,分别用于处理不同的异常场景。需要根据实际情况选择合适的异常处理策略,以确保程序的可靠性和稳定性。

    深入理解Java异常体系Java系列2021.pdf

    1. 为什么使用异常? 异常处理机制的主要目的是在程序遇到不可预见的问题时,能够优雅地处理错误而不是让程序崩溃。通过异常,程序可以中断执行流程,记录并传递错误信息,以便在合适的时机进行处理。相比于传统的...

    如何创建和使用自定义异常

    ### 如何创建和使用自定义异常 在Java编程语言中,异常处理机制是十分重要的一个组成部分,它能够帮助开发者有效地捕获并处理程序运行时出现的错误情况。自定义异常则是这一机制的重要扩展,允许开发者根据特定的...

    dubbo捕获自定义异常_dubbo异常捕获_dubbo异常_自定义异常_捕捉异常_

    Dubbo 默认支持 Java 的序列化,但为了性能和安全性,可以考虑使用更轻量级的序列化库,如 Protobuf 或 JSON。 7. **错误码和异常信息** 在自定义异常类中定义错误码和错误信息,可以提供更清晰的错误上下文。这有...

    【会计实操经验】财务高手怎样1分钟判断数据是否异常?.pdf

    - **现金余额异常**:公司现金余额过高且与经营业绩不匹配,可能暗示现金被限制使用或被关联方占用。长时间不变的高额现金可能隐藏风险。 - **高额现金与短期负债并存**:高额现金伴随大量短期债务,可能是资金被...

    C语言的异常处理和C++的异常处理有何区别?

    C++的异常处理更倾向于处理程序运行时的逻辑错误,如空指针解引用、数组越界等,并且鼓励程序员使用异常来表示非正常流程,而不是返回错误码。 C++的异常处理具有以下优势: 1. 异常安全:C++的异常处理机制支持...

    深入理解python异常处理(主要是利用try语句去捕获异常,那么什么是try语句,try语句怎么用,try语句有哪些功能。还会总结文件处理的方法)

    一.什么是异常 我们需要明白的是异常的发生不是因为我们代码写错了,我们的代码是可以编译的,但是在运行时产生了一个错误,这个错误是一个异常情况,计算机不能处理这个...第二种方法:使用try语句处理异常,事实上

    Java面向对象程序设计 实验四 异常处理

    * 怎么使用try-catch语句来捕获异常? 八、实验报告 实验报告包括实验目的、实验内容、实验步骤和实验结果等部分。学生需要提交实验报告,展示自己的实验结果和经验总结。 相关知识点: * 异常处理技术 * try-...

    子线程任务发生异常,主线程事务如何回滚

    下面将从多线程编程的基础知识、线程池的使用、异常捕获三个方面进行阐述。 一、多线程编程基础知识 在 Java 中,存在两种线程模型:主线程和子线程。主线程是程序的入口点,而子线程是由主线程创建的辅助线程。...

    Bjarne Stroustrup的FAQ:C++的风格与技巧

    ##### (18) 如何使用异常? 使用异常处理时,首先需要在可能发生错误的地方抛出异常,然后在适当的位置捕获并处理这些异常。C++中的异常处理语法包括`try`、`catch`和`throw`关键字。 ##### (19) 怎样从输入中读取...

    Visual C++源代码 23 如何使用主线程异常捕获错误

    Visual C++源代码 23 如何使用主线程异常捕获错误Visual C++源代码 23 如何使用主线程异常捕获错误Visual C++源代码 23 如何使用主线程异常捕获错误Visual C++源代码 23 如何使用主线程异常捕获错误Visual C++源代码...

    C ++ 需要注意的问题 FAQ

    **如何使用异常?** - **基本用法**:使用 `try` 块来尝试执行可能会抛出异常的代码,使用 `catch` 块来捕获并处理异常。 - **注意事项**:避免滥用异常处理作为控制流程的方式。 ##### 17. **怎样从输入中读取...

    使用Spring AOP对异常进行统一处理

    我们在捕获到异常并对异常进行处理时可能会遇到如下一些问题: 1.不确定应如何处理这些异常 2.需要记录异常日志时没有记录,或者异常在不同的地方重复记录,使得排错调试不方便 3.处理日志时,需要在每一个try-catch...

    异常体系的关键类

    通过合理地使用异常类和捕获机制,可以有效地隔离错误,使程序更加稳定。同时,适当的异常记录和日志可以帮助开发者快速定位和解决问题。 总结一下,Java异常体系的关键类主要围绕`Throwable`、`Error`、`Exception...

    Java自定义异常

    本文是探讨如何自定义异常以及使用自定义的异常。  在进行程序开发的过程中,自定义异常遵循以下四个步骤:  1)首先创建自定义异常类,语法格式:自定义异常类名 extends Exception。  2)在方法中通过...

    如何使用windows network monitor找出异常发包程序?.pdf

    使用 Windows Network Monitor 找出异常发包程序 Windows Network Monitor 是一种功能强大的网络抓包软件,由 Microsoft 开发,能够捕获和分析网络数据包,从而帮助网络管理员快速定位和解决网络问题。本文将指导您...

    方法抛出的异常处理 (2)修改UserDaoImp1类,要求用户id不能修改,修改则抛出异常 使用log4j输出日志信息

    (3)对抛出的异常使用try-catch进行异常处理。 实践二:使用try-catch-finally进行异常处理 需求说明 (1)对实践1的异常使用try-catch-finally进行异常处理 (2)在finally块输出是否抛出了异常 实现思路及关键...

    使用异常处理语句需要注意的几个问题

    下面我们将详细探讨使用异常处理语句时需要注意的问题: 1. **不要单独使用 try、catch 或 finally 语句块**:在Java中,`try`语句块用于包含可能抛出异常的代码,`catch`用于捕获并处理特定类型的异常,而`finally...

    捕获hive脚本异常: echo $?

    在IT行业中,尤其是在大数据处理领域,Hive是一个广泛使用的数据仓库工具,它允许用户通过SQL-like语法查询存储在Hadoop集群中的大规模数据集。本文将深入探讨如何在执行Hive脚本时捕获并处理异常,以及如何利用...

    什么是Java中的异常处理机制?Java中的异常分为哪些类型?(java面试题附答案).txt

    通过合理地使用异常处理机制,我们可以捕获和处理异常,使程序在出现异常时能够以一种可控的方式进行处理,避免程序崩溃或产生不可预料的结果。这对于提高程序的健壮性和可维护性具有重要意义。

Global site tag (gtag.js) - Google Analytics