类层次结构的异常处理

时间:2017-04-21 18:33:19

标签: c++

当我谈论类的异常处理时,我不确定我是否真的理解异常。我能找到的一个灰色区域是处理类层次结构的异常。例如,

#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

我不明白为什么以及如果不鼓励我该怎么办才能克服这个问题。

0 个答案:

没有答案