C++ 面试题 目录

C++ 中异常安全 (exception safety) 的等级有哪些?

推荐答案

在C++中,异常安全(Exception Safety)通常分为四个等级:

  1. 无异常安全(No Exception Safety):代码不保证在异常发生时能够保持任何状态的一致性。程序可能会崩溃或进入未定义状态。

  2. 基本异常安全(Basic Exception Safety):代码保证在异常发生时,程序不会崩溃,并且所有对象都处于有效状态,但可能会丢失部分数据或状态。

  3. 强异常安全(Strong Exception Safety):代码保证在异常发生时,程序状态与操作开始前的状态完全一致,即操作要么完全成功,要么完全失败,不会留下部分修改。

  4. 不抛出异常保证(No-throw Guarantee):代码保证不会抛出任何异常,通常用于析构函数和内存释放操作。

本题详细解读

1. 无异常安全(No Exception Safety)

这是最低级别的异常安全保证。在这种级别下,代码不提供任何异常处理机制,程序在异常发生时可能会崩溃或进入未定义状态。这种代码通常是不推荐的,因为它会导致不可预测的行为。

2. 基本异常安全(Basic Exception Safety)

基本异常安全保证程序在异常发生时不会崩溃,并且所有对象都处于有效状态。然而,程序的状态可能会发生变化,部分数据可能会丢失。这种级别的异常安全通常通过捕获异常并确保资源释放来实现。

3. 强异常安全(Strong Exception Safety)

强异常安全保证程序在异常发生时,状态与操作开始前的状态完全一致。这意味着操作要么完全成功,要么完全失败,不会留下部分修改。这种级别的异常安全通常通过“提交或回滚”机制来实现,例如使用事务或复制-交换(copy-and-swap)技术。

4. 不抛出异常保证(No-throw Guarantee)

这是最高级别的异常安全保证。在这种级别下,代码保证不会抛出任何异常。这种保证通常用于析构函数和内存释放操作,因为这些操作在异常发生时可能会导致资源泄漏。

总结

异常安全是C++编程中一个重要的概念,理解不同级别的异常安全有助于编写更健壮和可靠的代码。在实际编程中,应根据具体需求选择合适的异常安全级别。

纠错
反馈