繁体   English   中英

在异常c ++中展开堆栈

[英]stack unwinding in exception c++

我开始学习C ++中的异常主题。 我遇到了“堆栈展开”一词,据我所知,这意味着每当引发异常且“ throwing function”内没有catch块时,函数堆栈就会“展开”,由此所有本地对象的d'将调用tor(在外部函数中也会发生同样的情况,直到遇到合适的catch块为止)。

我的问题:

假设该异常是在try块中引发的,且具有适当的后续捕获,那么将为try块中定义的所有对象调用d'tor吗? 还是尝试在try块中定义的所有对象,直到发生异常? 还是根本没有对象,它们将“等待”该功能退出?

语义是,当控件离开该块时,应删除该块中声明的任何局部变量(函数是带有局部变量的命名块)。 因此,当您离开try块时,任何本地创建的变量都将被销毁并调用其适当的dtor。 创建的所有内容都将被销毁,如果未创建某些内容,则根本无法销毁。 唯一没有被破坏的是异常对象本身(如果抛出)(当然)。

根据C ++规范:

15.2构造函数和析构函数1.当控制权从引发异常的点传递到处理程序时,自输入try块以来,所有构造的自动对象都将调用析构函数。 自动对象按照其完成顺序的相反顺序销毁

15.2构造函数和析构函数3.调用从try块到引发异常的路径上构造的自动对象的析构函数的过程称为“堆栈展开”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM