首页 > 解决方案 > 基类抛出异常。如何传播?

问题描述

class base {
  public:
    base() : value(int()) {
      throw true;
    }
  private:
    int value;
};

class derived : public base {
  public:
    derived() : base() {  // base class constructor called, `value` to be initialized
      // I want this to propagate (rethrow) base class exception... how do I do it?
    }
};

int main(){
  try {
    derived a;
  }
  catch(bool){
    // Base class exception to be caught
  }

}

上面的例子中已经说了一切。如何传播(重新抛出)基类异常?

我试试这个可憎的:

class base {
  public:
    base() : value(int()) {
      throw true;
    }
  private:
    int value;
};

class derived : public base {
  public:
    derived() : try { base() } catch(bool) {throw;} {
      // ...
    }
};

int main(){
  try {
    derived a;
  }
  catch(bool){
    // Base class exception to be caught
  }

}

不编译,给出语法错误。非常期待。解决办法是什么?

不要进一步阅读。需要更多字符。输入更多字符。

标签: c++exceptiontry-catch

解决方案


您在问题中的代码已经完全符合您的要求(请参见此处的演示)。异常将调用堆栈回退到最近的处理异常类型的 catch 块。

由于derived::derived()构造函数没有捕获异常,它会自动传播给调用者。


推荐阅读