gpt4 book ai didi

C++异常处理查询

转载 作者:行者123 更新时间:2023-11-30 04:17:29 25 4
gpt4 key购买 nike

有人可以解释一下异常处理顺序是如何在下面的代码中发生的吗?它是如何评价到

"~B() called Handler of function try block of D()Exception in D"

#include "stdafx.h"
#include <iostream>

using namespace std;

class E {
public:
const char* error;
E(const char* arg): error(arg) {}
};

class B {
public:
B() {};
~B(){cout<<"~B() called"<<endl;}
};

class D: public B {
public:
D();
~D() { cout<<"~D() called"<<endl; }
};

D::D() try :B(){
throw E("Exception in D");
} catch(E&e)
{
cout<<"Handler of function try block of D()"<<e.error<<endl;
};

int main()
{
try {
D val;
}catch(...) {}
}

最佳答案

当您构造派生自另一个类的类的对象时,基类的构造函数会在派生的构造函数体之前(显式或隐式)被调用。您在 D 的构造函数主体中抛出异常。 B 此时已经构造完成。当异常传播出去时,B 的析构函数被调用以销毁部分构造的对象。

注意的第二个行为是重新抛出异常。构造函数上的函数 try block 总是会重新抛出异常。不可能忽略异常。如果是这样,您的对象将留下 B 已经被销毁。参见 GotW #66进行更深入的讨论。

关于C++异常处理查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17071660/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com