AI Academy
促销
CodeGym University
学习
课程
任务
调查 & 测验
游戏
帮助
日程
社区
Users
论坛
聊天
文章
成功故事
动态
评价
订阅
浅色主题
课时
评论
关于我们
开始
开始学习
立即开始学习
我的进度
课程
任务地图
课程
C++
C++
级别 54
RAII + 异常
C++ SELF
等级 54,
课时 0
分析为什么在 C++ 中资源在发生异常时会被自动释放(展开栈并调用析构函数)、RAII 如何防止泄漏但无法防止“部分应用”的更改、如何构造并保持类的不变式,以及为什么方法中的操作顺序对异常处理至关重要(通过
std::vector
、
push_back
、计数器
next_id_
和索引不同步的例子)。最后 —— 实用技巧和典型错误,包括规则:析构函数不应抛出异常。
异常安全保证:basic / strong / no‑throw
C++ SELF
等级 54,
课时 1
我们来解析方法在抛出异常时到底承诺了什么:对象的
有效性
(
basic guarantee
)、“要么全部成功,要么什么都不变”(
strong guarantee
)以及不向外抛出异常的约束(
no‑throw guarantee
)。通过类似
TaskTracker
的示例展示如何在
std::vector
与索引之间维护不变式,如何通过
try
/
catch
做回滚,以及为什么需要谨慎使用
noexcept
。
commit/rollback 习语
C++ SELF
等级 54,
课时 2
解析为什么
RAII
能拯救资源,但不能在异常情况下保证对象不变性,以及
commit/rollback
习语如何帮助实现“要么全部,要么什么都不做”。学习将方法拆分为
prepare
→
commit
→
rollback
,使用临时对象和
swap
作为简短的提交步骤,构建强异常保证,并通过
copy-and-swap
在
TaskStore
的示例中理解这一方法的特例。
noexcept — 实践意义
C++ SELF
等级 54,
课时 3
解析
noexcept
作为严格契约“异常不外露”:什么才算函数边界,为什么违反会导致
std::terminate
,在哪些地方标注是合适的(getter、
swap
、析构函数)以及在哪些地方危险(解析、容器增长)。单独讨论条件形式
noexcept
(expr)、通过
static_assert
的检查,以及以
TaskBook
为例的实践。
如何思考错误——前/后不变式
C++ SELF
等级 54,
课时 4
解析在 C++ 中对错误的“成熟”看法:方法契约(前置条件、后置条件以及异常时的保证)、对象不变式和通过
prepare
/
commit
技术获得强保证(“要么全成,要么全不成”)。以迷你类
TaskList
为例,学习在修改前验证输入、通过
validate_invariant()
检查不变式,并测试极端场景,包括“操作中途失败”。
Please enable JavaScript to continue using this application.