当我谈论类的异常处理时,我不确定我是否真的理解异常。我能找到的一个灰色区域是处理类层次结构的异常。例如,
#include<iostream>
class B {
public:
B() {
std::cout << "B ctor" << std::endl;
}
~B() {
std::cout << "B dtor" << std::endl;
}
};
class D : public B {
public:
D() {
std::cout << "D ctor" << std::endl;
}
~D() {
std::cout << "D dtor" << std::endl;
}
};
int main() {
try {
D d;
throw d;
} catch (D &d) {
std::cout << "Derived caught" << std::endl;
} catch (B &b) {
std::cout << "Base caught" << std::endl;
}
}
这实际上是打印:
B ctor
D ctor
D dtor
B dtor
Derived caught
D dtor
B dtor
D dtor
B dtor
我不明白为什么以及如果不鼓励我该怎么办才能克服这个问题。