C++ 异常处理机制:捕获、自定义与实战
核心目标
掌握异常处理的核心概念(异常、抛出、捕获、处理)及基本语法,理解 try-catch-throw 语句的执行流程。学会自定义异常类以满足实际开发中的个性化场景需求,同时掌握异常处理的最佳实践,规避内存泄漏和异常安全问题。此外,还需理解 noexcept 关键字的使用场景,结合实战案例提升代码的健壮性和容错能力。
异常处理概述
什么是异常处理
异常处理是 C++ 中处理程序运行时错误的机制,核心在于将错误检测与错误处理分离。在程序出错的地方(如除以零、内存分配失败)抛出异常,在合适的地方捕获并处理,避免程序直接崩溃,从而提升代码健壮性。
生活中的类比有助于理解:
- 快递配送:快递员发现地址错误时上报快递公司,由客服联系收件人解决。
- 餐厅点餐:厨师发现食材耗尽时告知服务员,由服务员向顾客说明并推荐其他菜品。
为什么需要异常处理
在异常处理出现前,程序通常通过返回值判断是否出错,但存在明显缺陷:
// 传统错误处理:通过返回值判断(缺陷明显)
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;
}
传统错误处理的缺陷包括:返回值可能与合法结果冲突;需手动检查每个函数返回值,代码冗余且易遗漏;错误传播困难,多层函数调用时需逐层传递错误状态。
异常处理的优势则体现在:错误检测与处理分离,代码结构清晰;异常可跨函数、跨层级传播,无需逐层传递;可携带丰富的错误信息;避免程序因小错误直接崩溃,提升用户体验。
C++ 异常处理的核心组件
C++ 异常处理依赖三个核心关键字:
throw:抛出异常(检测到错误时触发)。try:尝试执行可能抛出异常的代码块(异常检测范围)。catch:捕获并处理异常(匹配对应的异常类型,执行处理逻辑)。
核心流程为:try 块中执行代码 → 若发生错误,throw 抛出异常 → 程序跳转到最近的匹配 catch 块 → 执行 catch 中的处理逻辑 → 处理完成后,程序从 catch 块后继续执行。


