// 这样做的话,如果catch( MyExcepction* pMyExcepction)中不执行delete操作则会发生内存泄露
// 由catch( MyExcepction* pMyExcepction) 捕获
MyExcepction * pMyStru = new MyExcepction(120);
throw pMyStru;
}
else
{
// 直接创建新对象抛出
// 相当于创建了临时的对象传递给了catch语句
// 由catch接收时通过拷贝构造函数再次创建临时对象接收传递过去的对象
// throw结束后两次创建的临时对象会被析构掉
throw MyExcepction(throwErrorCode);
}
}
catch( MyExcepction* pMyExcepction)
{
// 输出本语句被执行信息
std::cout << "执行了 catch( MyExcepction* pMyExcepction) " << std::endl;
// 输出错误信息
std::cout << "error Code : " << pMyExcepction->getErrorId()<< std::endl;
// 异常抛出的新对象并非创建在函数栈上,而是创建在专用的异常栈上,不需要进行delete
//delete pMyExcepction;
}
catch ( MyExcepction myExcepction)
{
// 输出本语句被执行信息
std::cout << "执行了 catch ( MyExcepction myExcepction) " << std::endl;
// 输出错误信息
std::cout << "error Code : " << myExcepction.getErrorId()<< std::endl;
}
catch(...)
{
// 输出本语句被执行信息
std::cout << "执行了 catch(...) " << std::endl;
// 处理不了,重新抛出给上级
throw ;
}
// 暂停
int temp;
std::cin >> temp;
return 0;
}
① 凡本网注明稿件来源为"原创"的所有文字、图片和音视频稿件,版权均属本网所有。任何媒体、网站或个人转载、链接转贴或以其他方式复制发表时必须注明"稿件来源:我考网",违者本网将依法追究责任;
② 本网部分稿件来源于网络,任何单位或个人认为我考网发布的内容可能涉嫌侵犯其合法权益,应该及时向我考网书面反馈,并提供身份证明、权属证明及详细侵权情况证明,我考网在收到上述法律文件后,将会尽快移除被控侵权内容。