孤立代码块在结构中引发异常
Orphan code block throwing Exception in struct
我最近在一次采访中被问到这个问题。在代码下面,询问了代码片段的行为。我提到代码抛出一个会被捕获的异常,但结果并不是正确的答案。
我试着调试了这段代码片段,有两个问题。
1。如果执行确实进入了try{A A;}行,那么为什么catch无法捕获异常?
2。这段不属于结构中任何方法的孤立代码的行为是什么?如果我放入孤立代码被包括在B的构造函数方法下,即在B(({}内部,则异常被正确捕获。那么如何执行流处理这个?我的意思是,B中的孤立代码try-catch属于哪个方法/函数堆栈?
#include<iostream>
#include<string>
using namespace std;
struct A
{
A()
{
throw 2;
}
};
struct B
{
B()
// start of orphan code.
try
{
A a;
}
catch(int i)
{
cout << i << endl;
}
// end of orphan code.
};
int main(int argc, char* argv[])
{
B b;
cout << "3" << endl;
return(0);
}
您所称的"孤立代码"实际上是一个函数try块。当与构造函数和析构函数一起使用时,这样的块有一种特殊的行为:每个catch
块都隐式地重新抛出异常,就好像最后一条语句是throw;
一样。这样做是为了使无法使用未能完成构建的对象。
相关文章:
- 如何循环打印顶点结构
- 通过方法访问结构
- 处理多个异常集合的C++方法
- 使用不带参数的函数访问结构元素
- 孤立代码块在结构中引发异常
- 当我尝试访问结构类型时,我收到 std::bad_variant_access 异常
- 封送指向结构异常"cannot Read or Write protected memory"的指针数组的指针数组
- C++结构异常的清晰向量
- 结构与载体的C 向量导致异常
- C++ 异常情况下的错误 C2228(".val"的左侧必须具有类/结构/联合)
- STL中使用引用计数的数据结构存在哪些行为异常
- 结构异常错误
- 读取位置/使用结构的矢量时发生未处理的异常访问冲突
- 对`vtable for XXX的未定义引用(其中XXX是结构异常)
- 在 C++ 的异常层次结构中引入其他基类型
- 将C++结构封送到 C# 类时的访问违规异常
- 结构化异常处理程序(SEH)不会捕获堆损坏
- 你能把一个异常继承层次结构包装到另一个吗?——或者,另一种干净的处理方式
- 标准异常层次结构结构的原因
- 作为抛出异常对象的结构基类