当抛出异常时,保存堆栈跟踪是最常见的行为,在throw ex;中可以获得这一点,但是在C#中必须使用throw;。(还请注意,许多C#程序员经常错误地使用throw ex;而不是throw;)。如果某个时候必须清除堆栈跟踪(这是一种不太频繁的情况),那么就可以抛出一个新的异常,比如throw new MyException(ex.Message,
/test 1时,我可以从core获得正确的堆栈跟踪:#1 0xf7d028d0 in raise () from /libstring::append () from /usr/lib/libstdc++.so.6
#9 0x08049b96 in BuggyHandler::HandleEvent (this=0xffc26c9cargc=Cannot access memory at address 0
我试图理解为什么析构函数抛出异常是一个非常糟糕的想法。通过谷歌搜索,我知道如果析构函数抛出,比如说,在块范围对象的销毁过程中,obeject的销毁就会停止,如果还有其他析构函数没有调用的对象,我们就会得到内存泄漏。但就其本身而言,抛出异常的析构函数有多糟糕?there're no more objects to destruction
//therefore I think there's no memory