使用throw抛出异常的时候:
如果 catch(exception& e),则要求 throw exception(),局部变量except在被执行的catch运行完毕后自动被回收,可以理解为在throw位置的栈内执行了相应的catch流程,当catch流程执行完毕后退出throw语句所在的栈,因此局部变量 exception 被销毁
如果 catch(exception* e),则要求 throw new exception(),new出来的exception在堆内,此时一定要在catch与语句中进行delete操作,否则就是内存泄露。
#include#include #include class myexcept :std::exception { public: myexcept() { } ~myexcept() { std::cout << "~myexcept" << std::endl; } }; void func() throw(std::exception) //也可以写成父类 { throw myexcept(); } inline void func1() throw(myexcept) { throw new myexcept(); } int main() { try { func(); } catch (myexcept& pe) { std::cout << "catch exceptn"; } std::cout << "Hello World!n"; while (1); }


![[modern c++] try-catch-throw 异常处理时需要注意 [modern c++] try-catch-throw 异常处理时需要注意](http://www.mshxw.com/aiimages/31/589715.png)
