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++에서 올바른 방법은 무엇입니까? 포인터 또는 참조로 내부 예외를 저장하는 것입니까? (포인터가 필요할 수도 있으므로 첫 번째 예외 일 때 null이 될 수 있습니다.) 예외를 발생시킬 때 포인터를 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 : 이것은 새로운 예외 안에 기존의 예외가 채워지는 rethrow의 변형입니다 . 아마도 가비지 콜렉션 없이는 가능하지 않을 수 있습니다. –
@Ben Voigt : 예외가 소멸자를 호출 할 때 정확하게 기억하는 것이 그리 어렵지 않은 경우 가비지 수집없이 가능할 것입니다. –