使用throw抛出异常的时候:
如果 catch(exception& e),则要求 throw exception(),局部变量except在被执行的catch运行完毕后自动被回收,可以理解为在throw位置的栈内执行了相应的catch流程,当catch流程执行完毕后退出throw语句所在的栈,因此局部变量 exception 被销毁
如果 catch(exception* e),则要求 throw new exception(),new出来的exception在堆内,此时一定要在catch与语句中进行delete操作,否则就是内存泄露。
#include <iostream>
#include <stdexcept>
#include <string>
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()
{
/*
场景1
*/
try {
func();
}
catch (myexcept& pe) {
std::cout << "catch except\n";
}
/* 场景2
try {
func1();
}
catch (myexcept* pe) {
std::cout << "catch except\n";
delete pe;
}
*/
std::cout << "Hello World!\n";
while (1);
}