0
点赞
收藏
分享

微信扫一扫

[modern c++] try-catch-throw 异常处理时需要注意


使用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);
}

举报

相关推荐

0 条评论