Skip to content

Commit

Permalink
[faq] 修复迁移后异常抛出中未更正的链接
Browse files Browse the repository at this point in the history
  • Loading branch information
FeignClaims committed Mar 22, 2024
1 parent 660fdfc commit c6323d7
Showing 1 changed file with 2 additions and 2 deletions.
4 changes: 2 additions & 2 deletions faq/exception_throwing/normal.rst
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,11 @@

抛出异常时, 控制流沿着栈 **向上** 进行回溯, 直到找到一个能 **匹配** 到的 :cpp:`try-catch` 块, 如果没能找到, 则调用 :cpp:`std::terminate` 终止程序.

自动存储期对象是分配在栈上的 (:ref:`具体地, 分配在代码块 {} 之内 <question_board:lifetime>`), 因此当抛出异常而发生栈回溯时, 若栈回溯离开了代码块 (函数代码块、:cpp:`try-catch` 块、自行添加的 :cpp:`{}` 等), 则会依次析构 *已构造但尚未销毁的自动存储期对象*, 以它们的构造函数完成的逆序调用析构函数.
自动存储期对象是分配在栈上的 (:doc:`具体地, 分配在代码块 {} 之内 </faq/lifetime/index>`), 因此当抛出异常而发生栈回溯时, 若栈回溯离开了代码块 (函数代码块、:cpp:`try-catch` 块、自行添加的 :cpp:`{}` 等), 则会依次析构 *已构造但尚未销毁的自动存储期对象*, 以它们的构造函数完成的逆序调用析构函数.

.. hint::

如果不理解什么是栈, 请进行 :ref:`断点调试 <question_board:debugger>`, 其中:
如果不理解什么是栈, 请进行 :doc:`断点调试 </debugger/main>`, 其中:

- 调用堆栈显示的就是栈的内容, 各行是对应函数调用的记录 (如局部变量等), 称为栈帧. 如果对递归函数进行断点调试就会发现, 每次调用都创建了新的栈帧, 即可以理解为单纯就是调用了新的函数, 所以递归函数的调用与普通函数的调用是完全一致的.
- 局部变量窗口显示的就是栈帧中的局部变量内容, 因此当栈回溯过程离开了该局部变量所在的代码块, 自然会析构掉其中 *已构造但尚未销毁的自动存储期对象*.
Expand Down

0 comments on commit c6323d7

Please sign in to comment.