使用C#或Java时,我用来创建包含其他例外类的成员的例外类。例如:C++中例外情况下的例外
public class MyException : Exception {
private MyException ex;
private String message;
public String what() {
return this.message;
}
public String stack() {
if(ex != null) {
StringBuilder s;
s.append(this.what());
s.append(this.ex.stack());
return s.toString();
}
return this.what();
}
}
我一直在寻找在同一个问题,但对C++的例子,我找不到任何(也许我没有寻找正确的条款,你可以看到这个问题的标题不是很花哨)。
无论如何,在C++中这样做的正确方法是什么?是将内部异常存储为指针还是引用? (我想我可能需要一个指针,所以当它是第一个异常时它可以为空)。当我抛出异常时,它应该是与new
一起创建的指针吗?
编辑:也许我写的是一个有点混乱或不知名(接受)编程实践。所以我指定我打算如何使用这个类的一个片段:
try {
// Code that throws an exception of type MyException
} catch(MyException ex) {
MyException another = new MyException();
another.setEx(ex);
another.setMessage("A message that explains where the other exception was caught and on what conditions");
throw another;
}
在C++中不能有多个异常。如果在捕获到当前异常之前抛出一个新的异常,则程序终止(更确切地说,调用std :: terminate') –
@Gene:这是重新抛出的一种变体,其中现有的异常塞入新的异常。没有垃圾收集可能不可行。 –
@Ben Voigt:如果没有垃圾收集的话,如果它不是很难记得什么时候异常被调用的析构函数的话,那么可能是可行的。 –