C++ 异常处理机制:捕获、自定义与实战
一、核心目标
掌握异常处理的核心概念(异常、抛出、捕获、处理)及基本语法,理解 try-catch-throw 语句的执行流程。学会自定义异常类以满足实际开发中的个性化需求,并掌握最佳实践以规避常见错误,如内存泄漏和异常安全问题。同时,理解 noexcept 关键字的使用场景,结合实战案例提升代码的健壮性和容错能力。
重点在于 try-catch 捕获规则、自定义异常的继承设计以及异常安全保障策略。
二、异常处理概述
1. 什么是异常处理
异常处理是 C++ 中处理程序运行时错误的机制,核心思想是将'错误检测'与'错误处理'分离。当程序出错时(例如除以零、内存分配失败),在出错的地方'抛出'异常;在合适的地方(如主函数或业务逻辑层)'捕获'并处理,避免程序直接崩溃,从而提升代码的健壮性。
可以这样类比:快递员配送时发现地址错误,不会直接丢弃快递,而是上报公司由客服联系收件人解决。同理,程序模块发现异常,应告知上层处理模块,而不是直接终止。
2. 为什么需要异常处理
在引入异常处理前,程序通常通过返回值判断是否出错,但这存在明显缺陷:
// 传统错误处理:通过返回值判断
int divide(int a, int b) {
if (b == 0) {
return -1; // 用 -1 表示错误,但 -1 可能是合法计算结果
}
return a / b;
}
int main() {
int result = divide(10, 0);
if (result == -1) {
cout << "除数不能为 0!" << endl;
} else {
cout << "结果:" << result << endl;
}
return 0;
}
这种方式的弊端很明显:返回值可能与合法结果冲突(比如 -1 可能是 divide(-5, 5) 的结果);需要手动检查每个函数返回值,代码冗余且易遗漏;错误传播困难,多层调用时需逐层传递状态。
相比之下,异常处理的优势在于:错误检测与处理分离,结构清晰;异常可跨函数、跨层级传播,无需逐层传递;能携带丰富的错误信息;避免程序因小错误直接崩溃。
3. 核心组件
C++ 异常处理依赖三个核心关键字:
throw:抛出异常(检测到错误时触发)。- :尝试执行可能抛出异常的代码块(异常检测范围)。


